我有很多文件块,我需要使用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";
这会花很多钱吗?
答案 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内存限制,这对你的情况是可以接受的