gpt4 book ai didi

PHP脚本GD库内存问题

转载 作者:行者123 更新时间:2023-12-04 06:22:49 24 4
gpt4 key购买 nike

在我的网站上,我允许用户上传 6 张最大大小为 5MB 的图像。它们必须采用 gif、jpg/jpeg 格式。大多数用户上传的图像似乎大约为 2MB(1006188 字节),高度:1536 像素,宽度:2048 像素,非常大(尤其是在尝试调整大小时)。

然后我在服务器上有两个目录(large_img 和 small_img)。在 large_img 中,我将上传的文件移到那里。然后,我使用 GD 库将那个 large_img 目录中的图像重新调整为缩略图大小(100 高 x 100 宽)并将其移动到 small_img。

我偶尔会遇到错误

PHP Fatal error:  Out of memory (allocated 80740352) (tried to allocate 14592 bytes)

我的 apache 服务器上允许的最大内存是 64MB 。所以我的代码存在某种问题,即占用了这 64MB 的几个块,但由于某种原因没有释放它。

这是我拍摄图像并调整其大小的代码。我已经为 6 个图像中的第一个图像提供了它,并且没有在此处包含关于复制和粘贴的错误检查:
if(move_uploaded_file($_FILES['uploadedfile_0']['tmp_name'], $move_file_to_directoryname_large))
{
$n_width=100;$n_height=100; /*specify height/width of thumbnail image to be*/

if($_FILES["uploadedfile_0"]["type"]=="image/gif")
{
$im=imagecreatefromgif($move_file_to_directoryname_large);
if(!$im)
{
/*error could occur here if image was say named .gif but was another type like .jpg casing file type error*/
$image_resize_error++;
$array_error_msg_resize[$image_resize_error]="<p class='form_error_messages'>&#8226; An unfixable error occurred with your image ('<span class='standard_span'> " .$_FILES['uploadedfile_0']['name']." </span>').</p>";
}
else
{
$width=imagesx($im); $height=imagesy($im);
$newsmallerimage=imagecreatetruecolor($n_width,$n_height);
imagecopyresized($newsmallerimage,$im,0,0,0,0,$n_width,$n_height,$width,$height);
$move_file_to_directoryname_small=$target_path_small.$newfilename;
if(function_exists("imagegif"))
{
imagegif($newsmallerimage,$move_file_to_directoryname_small);
$images_db_small[0]=substr_replace($move_file_to_directoryname_small, "", 0, 24);
}
/*frees image from memory */
imagedestroy($newsmallerimage);
}
}
if($_FILES["uploadedfile_0"]["type"]=="image/jpeg")
{
$im=imagecreatefromjpeg($move_file_to_directoryname_large); /*create from image stored in directory specified when moving from /tmp*/
if(!$im)
{
/*error could occur here if image was say named .gif but was another type like .jpg casing file type error*/
$image_resize_error++;
$array_error_msg_resize[$image_resize_error]="<p class='form_error_messages'>&#8226; An unfixable error occurred with your image ('<span class='standard_span'> " .$_FILES['uploadedfile_0']['name']." </span>').</p>";
}
else
{
$width=imagesx($im);/*Original picture width is stored*/$height=imagesy($im);/*Original picture height is stored*/
$newsmallerimage=imagecreatetruecolor($n_width,$n_height);
$imagecopyresized($newsmallerimage,$im,0,0,0,0,$n_width,$n_height,$width,$height);
$move_file_to_directoryname_small=$target_path_small.$newfilename;
if(function_exists("imagejpeg"))
{
imagejpeg($newsmallerimage,$move_file_to_directoryname_small);
$images_db_small[0]=substr_replace($move_file_to_directoryname_small, "", 0, 24);
}
/*frees image from memory */
imagedestroy($newsmallerimage);
}
}
}

这是我的 php.ini 设置:
upload_max_filesize = 30M
post_max_size = 30M
max_execution_time = 120
max_file_uploads = 6
memory_limit=128M

脚本中的某些东西正在吞噬内存。上面提到的错误发生在这部分代码 $im=imagecreatefromjpeg($move_file_to_directoryname_large);如果是 jpeg 照片或 imagecreatefromgif() 如果是 gif 照片格式

我通过破坏图像来释放内存 $imagedestroy($newsmallerimage);
请注意,对于刚刚命名为 ['uploadedfile_1'] ...2 的其他 5 个图像,重复使用相同的代码 if() 语句

任何建议都可能使用 file_get_contents 或 GD 库将文件读入内存。我知道 GD 将整个图像保存在内存中未压缩,这可能是问题所在。
谢谢你们

最佳答案

你没有释放 $im ,也许这就是问题所在。

关于PHP脚本GD库内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6362015/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com