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

PHP fopen() memory usage while Merging many files together

我有很多文件块,我需要使用 PHP fopen function.However 合并它们,我担心内存使用量。 例如,我在 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";    

会不会占用我很多内存?

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

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

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

Will it cost a lot of my memory?

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

我会改变:

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

至:

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

这样您一次只处理 10 兆字节