我必须压缩包含最多10000个文件的搜索结果,其大小远远超过1Gb。
我创建一个zip存档并读取for循环whit fread中的每个文件,并将生成的文件添加到存档中。 由于此错误,我从未完成添加文件
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 1257723 bytes)
但我不认为在php.ini的memory_limit值中添加1Gb或更多可能是一个解决方案,因为内存资源有限。
由于zip文件将保留在内存中,直到它将被关闭(或者我在另一个问题中读到),我创建了一系列50Mb的zip文件,以避免内存泄漏。但即使php脚本创建另一个文件zip,它也会在同一个文件(第174个)上以相同的PHP致命错误停止。
为什么呢? 难道我做错了什么? 任何帮助将不胜感激。 这是文件创建的代码片段
$zip = new ZipArchive();
$nomeZipFile = "../tmp/" . $title . ".zip";
for ($x = 0; $x < count($risultato); $x++) {
$numFiles = 0;
$dir = '../tmp';
if (file_exists($nomeZipFile)) {
if (filesize($nomeZipFile) > 52428800) {
// filename count
if ($handle = opendir($dir)) {
while (($file = readdir($handle)) !== false) {
if (!in_array($file, array('.', '..')) && !is_dir($dir . $file))
$numFiles++;
}
}
$nomeZipFile = '../tmp/' . $title . $numFiles . '.zip';
$res = $zip->open($nomeZipFile, ZIPARCHIVE::CREATE);
} else {
$res = $zip->open($nomeZipFile, ZIPARCHIVE::CREATE);
}
} else {
$res = $zip->open($nomeZipFile, ZIPARCHIVE::CREATE);
}
...
// adding file
$fileDownload = "";
$fDownload = fopen($kt_response->message, "r"); // the file is downloaded though a webservice
while(!feof($fDownload)) { $fileDownload .= fread($fDownload, 1024); flush(); }
$zip->addFromString(filename, $fileDownload);
....
$zip->close();
}