我正在建立一个评论网站,并且我的图片上传处理存在问题。我已经设置了我的php.ini以允许10M的max_file_uploadsize和60M的post_max_size,但是我将文件上传大小限制为6MB。我正在使用smart_resize_image function来调整图片大小。我允许上传最多5个图像并使用foreach循环遍历$ _FILES数组。这是我的图像处理代码:
$allowed = array('image/pjpeg', 'image/jpeg', 'image/jpg', 'image/JPG', 'image/PNG', 'image/png');
$i = 1;
foreach($_FILES as $image) {
if (file_exists($image['tmp_name'])) {
if (in_array($image['type'], $allowed)) {
if($image['size'] < 6291456) {
include_once('/inc/smart_resize_image.function.php');
$movedL = '/public_html/ureview/images/restaurants/'.$pid.'/'.$sid.'-'.$i.'.jpg';
smart_resize_image($image['tmp_name'], null, 800, 500, true,$movedL, true,false,100);
$i++;
}else{
echo'Image #'.$i.' file size limit of 5MB!';
exit();
}
}else{
echo'Image #'.$i.' file type not allowed!';
exit();
}
}
}
我得到的错误是:
Allowed memory size of 33554432 bytes exhausted (tried to allocate 12288 bytes) in /inc/smart_resize_image.function.php
我认为问题是smart_resize_image函数在处理后取消链接但没有释放内存。我知道有多个网站可以处理图片上传,所以有可能但我无法弄清楚我的代码需要更改的内容。
编辑: 我希望看看我的代码中是否存在效率低下导致错误发生的原因。
答案 0 :(得分:1)
我看到$output
的{{1}}参数描述为
@param $ output - 新文件的名称(如果需要,包括路径)
但我也在line 110上看到你可以传递smart_resize_image
并且它会使函数返回图像资源:
'return'
现在您可以销毁,但在销毁之前,您需要将其保存为文件(您现在需要自己实现的$res = smart_resize_image($image['tmp_name'], null, 800, 500, true,'return', true,false,100);
函数的第218-226行)。所以你就是这样做的:
smart_resize_image()
上面的代码现在使用// smart_resize_image($image['tmp_name'], null, 800, 500, true,$movedL, true,false,100); /* OLD */
$quality = 100;
$info = getimagesize($image['tmp_name']);
$res = smart_resize_image($image['tmp_name'], null, 800, 500, true,'return', true,false,100);
switch ( $info[2] ) {
case IMAGETYPE_GIF: imagegif($res, $movedL); break;
case IMAGETYPE_JPEG: imagejpeg($res, $movedL, $quality); break;
case IMAGETYPE_PNG:
$quality = 9 - (int)((0.9*$quality)/10.0);
imagepng($res, $movedL, $quality);
break;
default: break;
}
imagedestroy ( $res ); // Now you should be able to destroy the resource (returned from the 'smart_resize_image' function)
释放与图像资源相关的任何内存,并希望能阻止你使内存耗尽错误