我有两个文件,一个用于上传图像,另一个用于从数据库中检索图像并将其显示在网页上。但是,图像仅显示为损坏的图像图标。我不明白为什么。
感谢您提前提供任何帮助。
HTML表单:
<form action="index.php" method="POST" enctype="multipart/form-data">
<label for="image">File:</label>
<input type="file" name="image">
<input type="submit" value="Upload">
</form>
用于上传它的php(与数据库的连接在下面省略,但它完美地运行):
//file stuff
$file= $_FILES['image']['tmp_name'];
if(!isset($file))
echo "Please select an image";
else {
$image=addslashes(file_get_contents($_FILES['image']['tmp_name']));
$imageName=addslashes($_FILES['image']['name']);
$imageSize=getimagesize($_FILES['image']['tmp_name']);
if(!$imageSize)
echo "Thats not an image you mong";
else {
//upload
$query="INSERT INTO store VALUES('','$imageName','$image')";
$sendQuery=mysql_query($query);
if(!$sendQuery)
echo "This is embarressing. It didn't work";
else {
$lastid=mysql_insert_id();
echo "Image was uploaded. <br>Your image:";
echo "<img src=get.php?id=$lastid/>";
}
}
}
用于检索图像的PHP(同样,数据库连接在下面省略,但工作正常):
$id=addslashes($_REQUEST(['id']));
$imageQuery="SELECT * FROM store WHERE id=$id;";
$sendImageQuery=mysql_query($imageQuery);
$image=mysql_fetch_assoc($sendImageQuery);
$image=$image['image'];
header("Content-type: image/jpeg");
echo $image;
答案 0 :(得分:2)
确保打开的php标记是文件的第一行。如果打开的php标记不在文件的第一行,则内容已经写入响应,导致对header()函数的调用被忽略。
<?php // this has to be on line 1
// do database connections stuff, no output can be sent to the response.
$id=addslashes($_REQUEST(['id']));
$imageQuery="SELECT * FROM store WHERE id=$id;";
$sendImageQuery=mysql_query($imageQuery);
$image=mysql_fetch_assoc($sendImageQuery);
$image=$image['image'];
header("Content-type: image/jpeg");
echo $image;
?>
答案 1 :(得分:0)
也许是一个神奇的引用设置(magic_quotes_gpc
),请尝试:
$image=stripslashes($image['image']);
您应该使用mysql_real_escape_string()
代替addslashes()
,并且仅在未启用魔术引号的情况下使用。