来自php文件的img src

时间:2011-08-15 19:19:48

标签: php

我有以下代码:

<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 ..为什么会这样?

1 个答案:

答案 0 :(得分:1)

您对PHP文件上传和文件处理有一个基本的误解。

echo $somevar = fopen不会输出图像本身。它会把fopen返回的句柄放入,这将是一些无意义的整数。你想要的是(至少):

readfile($_FILES['before']['tmp_name']);

将打开文件并将其内容发送到浏览器。

您也没有将上传的文件保存在任何地方,所以基本上用户上传2张图片,输出一张,然后删除图片 - PHP不会永久保存上传的文件。您必须手动将文件移动/复制到其他位置才能保留它们。通常用move_uploaded_file()函数

完成

同样,在<img>标记中引用您的上传处理程序脚本也不起作用。该调用将作为GET请求发出,并且文件上传不会通过GET发生,因此您的脚本将返回空/损坏的图像,因为没有要读取的文件。