2011-08-15 149 views
0

我有以下代码:IMG SRC

<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

这是http://stackoverflow.com/questions/7068880/showing-image-loaded-from-file-before-upload-post的延续,而不是相当欺骗。 –

回答

1

你有PHP文件上传和文件处理的基本误解一般。

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

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

which'll打开文件并发送其内容到浏览器。

您还没有保存上传文件的任何地方,所以基本上用户上传2张图像,输出一个,然后将图像删除 - PHP不会永久保存上传的文件。您必须手动移动/复制其他文件以保存它们。通常这是通过move_uploaded_file()函数完成的

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

+0

那么对此有何修正?我需要首先使用move_uploaded_file保存两个上传的文件? – adit

+0

是的,只有在您将它们移动到文档根目录的某个位置后,才可以将它们用作''参考的目标。 –

+0

move_uploaded_file()将永久存储图像吗?问题是,我只是想暂时显示此图像..这将用于以后 – adit