[英]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.