第一个问题,如果我做错了什么,很抱歉!
我的问题是,我有一个产品目录,它在产品目录中最多显示 18 个缩略图,每个大约 6kb。每个缩略图调用一个脚本 get_db_image 来搜索并返回与产品相关的图像。很简单,到目前为止。仅当对产品目录页面同时发出大约 3 或 4 个请求时才会出现此问题,每个用户都希望返回 18 个缩略图和详细信息,但是当他们都同时进行时,我会出现内存不足错误有时服务器崩溃。我已经剥离了检索和显示图像的代码,并且托管人员将内存限制提高到了 256M,但这一切都无济于事。据我所知,我正在销毁我创建的图像,并且在发出请求后虚拟内存会回到零分秒,但是在高峰期,所有内存都被利用了,因此崩溃了,所以我唯一能想到的就是在开始下一张之前获取、显示和销毁每张图像,但我不知道该怎么做,但也许有更好的解决方案?请帮忙,把我的头发拉出来,我没有太多可浪费的了!
// executes the query searching for the image
$res = execPDORetRes($query, $vars);
// if there is no image, load a default
if(sizeof($res) == 0)
{
$query_parts = explode(" ", $query);
$query = "select * from ".$query_parts[3]." where id = :id";
$vars = array(':id-int' => 1);
$res = execPDORetRes($query, $vars);
}
$data = $res[0];
// create the image from the DB
$img = imagecreatefromstring($data[$name]);
$type = "image/pjpeg";
Header( "Content-type: image/pjpeg");
$width = imagesx($img);
$height = imagesy($img);
// if the image is too big
if($size_w != $width || $size_h != $height)
{
// set widths and heights
if ($width <= $size_w)
{
$new_w = $width;
$new_h = $height;
}
else
{
$new_w = $size_w;
$new_h = $size_h;
}
// create a new image of the specified width and height
$new_img = imagecreatetruecolor($new_w,$new_h);
// resize the original
imagecopyresized($new_img,$img,0,0,0,0,$new_w,$new_h,$width,$height);
// determine image type and send it to the client
imagejpeg($new_img,"","80");
// clear the image from memory
imagedestroy($new_img);
imagedestroy($img);
unset($width, $height, $new_h, $new_w, $new_img, $img);
}
else
{
// if the image is smaller than or the right size
// determine image type and send it to the client
imagejpeg($img,"","80");
// clear the image from memory
imagedestroy($img);
unset($width, $height, $img);
}
ob_flush();
谢谢您的帮助。