我正在尝试使用 imagecreatefromjpeg 将图像从一个目录同步到另一个目录以调整过程中的图像大小。该脚本总共必须处理 15 GB 的图像文件。起初脚本运行得很好,直到我遇到内存限制。我发现通过设置以下代码可以解决此问题:
ini_set("memory_limit","64M");
但是在同步了更多图像之后,同样的问题又一次又一次地发生,直到第五次我将限制设置为 1000M,但这并没有解决问题。即使在尝试了 9999M 之后,它仍然给了我同样的错误:
Fatal error: Allowed memory size of 1778384896 bytes exhausted (tried to allocate 57060 bytes)
我检查了我的 phpinfo() 并发现它设置正确:
Directive Local Value Master Value
memory_limit 99999M 512M
谁能给我另一种选择来增加内存限制?
添加我用于同步的代码:
// SYNCHRONIZE FILES
// GET SOURCE FILES
if ($handle = opendir($hrdir)) {
while (false !== ($file = readdir($handle))) {
if(is_file($hrdir.$file)) {
$nieuwehr_array[$file] = filemtime($hrdir.$file);
}
}
closedir($handle);
}
// GET EXISTING FILES
if ($handle = opendir($hrdestinationdir)) {
while (false !== ($file = readdir($handle))) {
if(is_file($hrdestinationdir.$file)) {
$huidigehr_array[$file] = filemtime($hrdestinationdir.$file);
}
}
closedir($handle);
}
$hr_added_array = array();
$hr_modified_array = array();
// ADD NEW OR MODIFIED FILES
foreach($nieuwehr_array as $file => $change_date) {
if(!isset($huidigehr_array[$file]) || $change_date != $huidigehr_array[$file]) {
new createImage($hrdir, $file, $hrdestinationdir, 800, 600);
touch($hrdestinationdir.$file,$change_date);
if(isset($huidigehr_array[$file])) {
$hr_modified_array[] = $file;
} else {
$hr_added_array[] = $file;
}
}
}
我提前为一些荷兰变量名称道歉。
编辑 1-12-2011 12:00:刚刚发现问题出在 62MB 的图像文件上。看起来文件更大然后给或取 55MB 是问题所在。有人知道是什么原因造成的吗?