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