繁体   English   中英

合并多个文件时PHP fopen()的内存使用情况

[英]PHP fopen() memory usage while Merging many files together

我有很多文件块,需要使用PHP fopen函数合并它们,但是我担心内存使用情况。 例如,我在split_hash.txt列出了大约100个文件,每个文件大约100mb。 在这里,我将它们结合在一起:

<?php  
$hash = file_get_contents("split_hash.txt");  
$list = explode("\r\n",$hash);  
$fp = fopen("hadoop2.zip","ab"); 
foreach($list as $value){  
    if(!empty($value)) {  
        $handle = fopen($value,"rb");  
        fwrite($fp,fread($handle,filesize($value)));  
        fclose($handle);  
        unset($handle);  
    }  
}  
fclose($fp);  
echo "ok";    

它会占用我很多内存吗?

它会占用我很多内存吗?

如果您使用fread($handle,filesize($value))来获取fread的整个文件长度,则在每个文件中以较小的块使用fread。

我会改变:

fwrite($fp,fread($handle,filesize($value)));

至:

while (!feof($handle)) {
    fwrite($fp,fread($handle,1048576));  
}

这样您一次只能处理10 MB

这将使您在内存高峰期最多消耗100个文件大小。

您正在读取整个文件并将其写入另一个文件。 在这种情况下,您拥有多少文件无关紧要,但是文件的大小却很重要。

您说的是〜100 mb,默认的php设置是128 mb内存限制,这对于您的情况是可以接受的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM