0
“res.php”下方提供的脚本旨在缩放随后用于HTML页面的HEADER css中的图像。根据“CID”(俱乐部ID)调用图像。每个俱乐部都有存储在数据库中的信息,其中包括一个名为club_header的信息。 club_header是一个存储绝对图像位置(文件系统或网页)的VARCHAR。 “res.php”功能是调用图像并将其输出到浏览器,以及将图像重新调整大小以适应设置。默认情况下,这些设置是960 x 200.PHP图像缩放不起作用
但是,由于某些原因,脚本没有做它必须做的事情,而是输出一个破碎的图像。代码有什么问题?
某些服务器+ PHP的信息,如果需要
服务器:的Apache v2.2.21,PHP v5.3.8,SQL v5.5.16,GD v2.0.34
的php.ini:的max_execution_time = 300,max_input_time设置= 60,memory_limit的= 208M,的post_max_size = 24M
“res.php” 源代码
require("php/db.class.php");
function scaleImageFileToBlob($file) {
$file = $_GET['cid'];
$query = mysql_query("SELECT * FROM clubs WHERE club_id = '".$_GET['cid']."'");
$obj = mysql_fetch_array($query);
$photoObj = $obj['club_header'];
$source_pic = $photoObj;
$max_width = 960;
$max_height = 200;
list($width, $height, $image_type) = getimagesize($file);
switch ($image_type)
{
case 1: $src = imagecreatefromgif($file); break;
case 2: $src = imagecreatefromjpeg($file); break;
case 3: $src = imagecreatefrompng($file); break;
default: return ''; break;
}
$x_ratio = $max_width/$width;
$y_ratio = $max_height/$height;
if(($width <= $max_width) && ($height <= $max_height)){
$tn_width = $width;
$tn_height = $height;
}elseif (($x_ratio * $height) < $max_height){
$tn_height = ceil($x_ratio * $height);
$tn_width = $max_width;
}else{
$tn_width = ceil($y_ratio * $width);
$tn_height = $max_height;
}
$tmp = imagecreatetruecolor($tn_width,$tn_height);
/* Check if this image is PNG or GIF, then set if Transparent*/
if(($image_type == 1) OR ($image_type==3))
{
imagealphablending($tmp, false);
imagesavealpha($tmp,true);
$transparent = imagecolorallocatealpha($tmp, 255, 255, 255, 127);
imagefilledrectangle($tmp, 0, 0, $tn_width, $tn_height, $transparent);
}
imagecopyresampled($tmp,$src,0,0,0,0,$tn_width, $tn_height,$width,$height);
/*
* imageXXX() only has two options, save as a file, or send to the browser.
* It does not provide you the oppurtunity to manipulate the final GIF/JPG/PNG file stream
* So I start the output buffering, use imageXXX() to output the data stream to the browser,
* get the contents of the stream, and use clean to silently discard the buffered contents.
*/
ob_start();
switch ($image_type)
{
case 1: imagegif($tmp); break;
case 2: imagejpeg($tmp, NULL, 100); break; // best quality
case 3: imagepng($tmp, NULL, 0); break; // no compression
default: echo ''; break;
}
$final_image = ob_get_contents();
ob_end_clean();
return $final_image;
}
echo scaleImageFileToBlob($file);
预先感谢您。
你打开SQL注入。 –
你的照片尺寸是多少? (以像素为单位) –
@arxanas我知道:),这是在本地主机上运行的,也是它迄今为止唯一的1天项目。所以我会在稍后处理安全问题:)但首先必须让所有其他工作。 –