我正在尝试使用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是问题。有人知道是什么原因引起的吗?
答案 0 :(得分:0)
任何人都可以给我另一个选项来增加内存限制吗?
为什么不问一下如何编写一个内存消耗更理智的程序?
您是否正在阅读阵列中的所有图像,而不是逐个阅读?
那么,在地球上,你称之为“同步”?
new createImage($hrdir, $file, $hrdestinationdir, 800, 600);
这条线似乎是你的问题。
关于图像尺寸,
在代码中添加一些对memory_get_usage
的调用并查看进度。
echo "MEM: ",number_format( memory_get_usage()/(1024*1024) ),"MB used\n";