我有以下代码:
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>Image uploader</title>
</head>
<body>
<h2>Image uploader</h2>
<form method="post" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" enctype="multipart/form-data">
Before Image:
<input type="file" name="before" size="40">
<input type="hidden" name="MAX_FILE_SIZE" value="10000000">
<br />
<?php echo '<img src="showimage.php?type=before"/>' ?>
<br />
<br />
After Image:
<input type="file" name="after" size="40">
<input type="hidden" name="MAX_FILE_SIZE" value="10000000">
<br />
<?php echo '<img src="showimage.php?type=after"/>' ?>
<br />
<br />
<input type="submit" value="submit">
</form>
这是我的showimage:
<?php
if((is_uploaded_file($_FILES['before']['tmp_name']) && getimagesize($_FILES['before']['tmp_name']) != false) ||
(is_uploaded_file($_FILES['after']['tmp_name']) && getimagesize($_FILES['after']['tmp_name']) != false))
{
header("Content-type: image/jpg");
if ($_GET['type'] == 'before')
echo $before_img = fopen($_FILES['before']['tmp_name'], 'rb');
else ($_GET['type'] == 'after')
echo $after_img = fopen($_FILES['after']['tmp_name'], 'rb');
}
else {
echo 'http://www.stampinup.net/esuite/images/pages/noImageUploaded.png?763.458';
}
?>
问题是img src不会渲染showimage.php ..为什么会这样?
答案 0 :(得分:1)
您对PHP文件上传和文件处理有一个基本的误解。
echo $somevar = fopen
不会输出图像本身。它会把fopen返回的句柄放入,这将是一些无意义的整数。你想要的是(至少):
readfile($_FILES['before']['tmp_name']);
将打开文件并将其内容发送到浏览器。
您也没有将上传的文件保存在任何地方,所以基本上用户上传2张图片,输出一张,然后删除图片 - PHP不会永久保存上传的文件。您必须手动将文件移动/复制到其他位置才能保留它们。通常用move_uploaded_file()
函数
同样,在<img>
标记中引用您的上传处理程序脚本也不起作用。该调用将作为GET请求发出,并且文件上传不会通过GET发生,因此您的脚本将返回空/损坏的图像,因为没有要读取的文件。