将许多文件合并在一起的PHP fopen()内存使用情况

时间:2017-10-29 07:08:38

标签: php fopen

我有很多文件块,我需要使用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";    

这会花很多钱吗?

2 个答案:

答案 0 :(得分:1)

  

这会花很多钱吗?

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

我会改变:

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

为:

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

这样你一次只能处理10兆字节

答案 1 :(得分:0)

在内存峰值中,您将花费100个文件大小的最大值。

您正在阅读整个文件并将其写入另一个文件。在这种情况下,你拥有多少文件并不重要,但重要的是文件有多大。

你说的是~100 mb,默认的php设置它的128 MB内存限制,这对你的情况是可以接受的