使用PHP调整JPG大小的内存错误



我已经在我的台式机上安装了Apache和PHP,并运行以下PHP脚本,将一个文件夹中的大图像转换为较小的缩略图,将存储在另一个文件夹中。

"1000. jpg"在一个目录中变成了400像素宽的"1000sm.jpg"在另一个目录

如果我只有20张图片要转换,它会运行并制作缩略图。但是如果我有太多的图像,脚本会提前停止并报告内存问题。

致命错误:D:Documentsmyserver.comadminmakethumbnails.php中允许的内存大小为134217728字节已耗尽(试图分配29440字节)on line22

内存错误似乎不是基于文件大小而发生的,因为当它停止时,它已经处理了更大的图像。

我添加了"set_time_limit(300);因为一开始它会在30秒后停止,这是不够的。

我可以在这里做一些不同的事情来避免内存问题吗?

<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
set_time_limit(300);
$SourcePath = "../img/";
$TargetPath = "../imgsm/";
$TargetWidth = 400;
$dh = opendir($SourcePath);
while (($FileName = readdir($dh)) !== false)
{
if (substr_count($FileName, 'jpg') > 0 )
{
$SourcePathAndFileName = $SourcePath . $FileName;
$TargetPathAndFileName = $TargetPath . str_replace(".jpg", "sm.jpg", $FileName);
list($SourceWidth, $SourceHeight) = getimagesize($SourcePathAndFileName);
$TargetHeight = floor($SourceHeight * $TargetWidth / $SourceWidth);
$thumb = imagecreatetruecolor($TargetWidth, $TargetHeight);
$source = imagecreatefromjpeg($SourcePathAndFileName);
imagecopyresized($thumb, $source, 0, 0, 0, 0, $TargetWidth, $TargetHeight, $SourceWidth, $SourceHeight);
imagejpeg($thumb, $TargetPathAndFileName);
}
}
?>

不需要更新超时时间,但是需要更新内存限制。

在你的情况下,可能你必须在while avec imagejpeg中添加imagedestroy来清理内存。

if (substr_count($FileName, 'jpg') > 0 )
{
$SourcePathAndFileName = $SourcePath . $FileName;
$TargetPathAndFileName = $TargetPath . str_replace(".jpg", "sm.jpg", $FileName);
list($SourceWidth, $SourceHeight) = getimagesize($SourcePathAndFileName);
$TargetHeight = floor($SourceHeight * $TargetWidth / $SourceWidth);
$thumb = imagecreatetruecolor($TargetWidth, $TargetHeight);
$source = imagecreatefromjpeg($SourcePathAndFileName);
imagecopyresized($thumb, $source, 0, 0, 0, 0, $TargetWidth, $TargetHeight, $SourceWidth, $SourceHeight);
imagejpeg($thumb, $TargetPathAndFileName);
imagedestroy($thumb);
imagedestroy($source);
}

https://www.php.net/manual/en/function.imagedestroy.php

PHP ini_set memory limit

相关内容

  • 没有找到相关文章

最新更新