脚本宝典收集整理的这篇文章主要介绍了php – 与file_get_contents相比,是否有更少的内存扩展或更有效的合并MP3方式?,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在这样做:
$combineDFiles = ""; $dir = $_POST['dir']; if ($handle = opendir($dir)) { while (false !== ($entry = readdir($handle))) { if ($entry != "." && $entry != "..") { $combinedFiles .= file_get_contents(urldecode($dir."/".$entry)); } } closedir($handle); } file_put_contents("mp3/".$dir.".mp3",($combinedFiles));
如果我做:
ini_set('memory_limIT',-1);
有用.我已经尝试将此限制设置为4MB,并且它不会引发内存错误,但文件不会被创建.没有设置任何限制并保留默认值,我得到分配内存错误.我不想把它留在-1,因为我读过它是不好的做法,可能导致问题.
编辑:即使设置为8GB,这是我的计算机内存,它不起作用.
<?PHP $dir = $_POST['dir']; if ($handle = oPEndir($dir)) { $outFd = fopen(sPRintf("mp3/%s.mp3",$dir),'wb'); while (false !== ($entry = readdir($handle))) { if ($entry != "." && $entry != "..") { $path = urldecode(sprintf("%s/%s",$dir,$entry)); $inFd = fopen($path,'rb'); stream_copy_to_stream($inFd,$outFd); fclose($inFd); } } fclose($outFd); closedir($handle); }
现在,我们有一些安全问题,没有正确验证输入,如果这是一个公共工具,你应该修复它们.但是现在我只是讨论手头的问题.
为什么我们不首先打开输出文件,然后将每个输入文件复制到输出文件的末尾,而不是将所有这些文件中的数据一次存储在内存中?我们可以用stream_copy_to_stream()
做到这一点.
我们可以通过stream_set_chunk_size()
使用较小的块大小进行操作,但对于您的应用来说,听起来可以暂时将一个MP3存储在内存中(4-5Mb顶部).您也可以手动一次读取/写入一个块而不是使用stream_copy_to_stream(),但总体思路是一样的.
以上是脚本宝典为你收集整理的php – 与file_get_contents相比,是否有更少的内存扩展或更有效的合并MP3方式?全部内容,希望文章能够帮你解决php – 与file_get_contents相比,是否有更少的内存扩展或更有效的合并MP3方式?所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。