2017-10-29 52 views
0

我有很多文件块,我需要使用PHP fopen函数合并它们。但是,我对内存使用感到担忧。 例如,我在split_hash.txt中列出了约100个文件,每个文件约为100MB。在这里,我将它们结合在一起:将fopen()的内存使用量合并到一起的许多文件

<?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";  

会花费我很多的记忆吗?

+0

我觉得你最大的挑战将是脚本执行时间。 – Scuzzy

+0

会花费很多时间吗?我正在处理分块上传,因此它必须快速。 –

+0

这将取决于您的基础设施,例如,本地SSD上的数据服务器将快速执行文件系统激活。我认为你只需要尝试一下,看看需要多长时间处理100个文件100个文件 – Scuzzy

回答

1

这将会耗费很多我的记忆是否可以接受?

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

我会改变:

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

到:

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

让你只用10兆字节在同一时间处理

0

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

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

你说这是〜100 MB,使用默认的PHP设置是128 MB的内存限制,这是你的情况

相关问题