我在使用水印脚本时遇到问题。以下是剧本:
if (isset($_GET['imgid'])) {
include "../mysql_connect.php";
$imgid = $_GET['imgid'];
$query = "SELECT * FROM img_ref WHERE id='$imgid'";
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_array($result);
$imagesource = "../ajax_uploads/$row[submitter_id]-uploads/$row[filename]";
} else {
$imagesource = "../ajax_uploads/" . $_GET['path'];
}
$info = pathinfo($imagesource);
$filetype = $info['extension'];
if($filetype == "gif") $image = @imagecreatefromgif($imagesource);
if($filetype == "jpg") $image = @imagecreatefromjpeg($imagesource);
if($filetype == "png") $image = @imagecreatefrompng($imagesource);
if (!$image) die();
$watermark = @imagecreatefrompng('../images/watermark.png');
// This is the key. Without ImageAlphaBlending on, the PNG won't render correctly.
imagealphablending($image, true);
$imagewidth = imagesx($image);
$imageheight = imagesy($image);
$watermarkwidth = imagesx($watermark);
$watermarkheight = imagesy($watermark);
$startwidth = (($imagewidth - $watermarkwidth)/2);
$startheight = (($imageheight - $watermarkheight)/2);
imagecopy($image, $watermark, $startwidth, $startheight, 0, 0, $watermarkwidth, $watermarkheight);
imagejpeg($image);
imagedestroy($image);
imagedestroy($watermark);
现在,如果我传递一个'path'变量,一切正常,图像就像我想象的那样正确显示。但是,当我尝试传递imgid值并从数据库中检索路径时,图像将显示在屏幕上的原始数据中 - 而不是图像。
我已尝试指定标题
header("Content-type: image/jpeg");
然而这没有帮助。它似乎不是文件夹权限的问题,就好像我使用数据库中的引用指定路径名,它工作正常。似乎包括第一个“if”部分似乎打破了输出,我不知道为什么。
有人可能会对我有所了解吗?
谢天谢地,
丹
更新
好吧,不知何故,它开始使用“Header(”Content-type:image / jpeg“);”放在PHP文件的顶部,所以如果我直接转到文件并输入GET id,我会返回图片 - 这很好(不知道改变了什么)。
然而,我似乎还有一个问题就是在其他地方展示这张照片。我正在使用“fancybox”调用图片,这是一个jquery插件。当它显示图像时,它仍然显示原始数据。如果我使用路径,它显示正常 - 只是出于某种原因,使用GET id选项时会显示原始数据。我仍在调查,但感谢目前的建议。
答案 0 :(得分:3)
似乎使用标题
header("Content-type: image/jpeg");
似乎努力将其显示为图像 - 但由于某种原因,它无法与fancybox一起使用。我查看了API并且已经强迫fancybox意识到它是一个图像:
$.fancybox({
'href':'processes/process_watermark.php?imgid=' + id,
'type':'image'
});
这使它显示正确。
感谢大家的帮助 - 以及提醒我有关SQL攻击的所有评论。
答案 1 :(得分:0)
mysql_fetch_array
的失败,也许查询不会产生任何结果?pathinfo
的路径可能不正确。error_reporting(E_ALL)
$imagesource = "../ajax_uploads/$row[submitter_id]-uploads/$row[filename]";
更改为$imagesource = "../ajax_uploads/" . $row['submitter_id'] . "-uploads/" . $row['filename'];