【问题标题】:Image will not display but is uploaded to server ok图片不显示但上传到服务器ok
【发布时间】:2016-02-18 01:51:57
【问题描述】:

我想使用上传工具来允许用户上传个人资料图片。上传部分工作正常......但是,当我尝试显示下面上传的图像时,它显示为损坏的图像。我已经从这里的问题中尝试了许多不同的示例代码,而且我一遍又一遍地遇到同样的问题。任何帮助,将不胜感激!抱歉,如果我的格式是垃圾......我很新

这是我的上传.php

<?php require 'config/init.php';
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 20000000000000000000000)
&& in_array($extension, $allowedExts))
  {
if ($_FILES["file"]["error"] > 0)
  {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
  }
 else
  {
    echo "Upload: " . $_FILES["file"]["name"] . "<br>";
    echo "Type: " . $_FILES["file"]["type"] . "<br>";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";

   if     
(file_exists("/images/" . $_FILES["file"]["name"]))
  {
  echo $_FILES["file"]["name"] . " already exists. ";
  }
   else
  {
  move_uploaded_file($_FILES["file"]["tmp_name"], "/images/" . $_FILES["file"]["name"]);
  echo "Stored in: " . "upload/" . $_FILES["file"]["name"]."<br>";

$image = $_FILES["file"]["name"]; 
$img = "/images/".$image;
echo "<img src=\"/images/$img\">";
  }
  }
 }
else
{
  echo "Invalid file";
}


?>

这是我的html表单

 <form action="upload.php" method="post" enctype="multipart/form-data">
 <label for="file">Filename:</label>
 <input type="file" name="file" id="file" /> 
 <br />
 <input type="submit" name="submit" value="Submit" />
 </form>

【问题讨论】:

  • 服务器上的图片没有损坏吗? (尝试展示)您是否有权允许公开展示您的图片?
  • “损坏的图像”是什么意思?服务器有返回什么吗?
  • @AdamLesniak 它返回例如“上传的文件:leedsnew.jpg 类型:图像/jpeg 大小:72.265625 千字节”,但是在图像应该在的位置下方,它出现好像找不到图像即断成两半的空白图像
  • @Blag 我假设上传时图像会出现在文件夹中?
  • 当您查看此上传页面时,您的网络浏览器地址栏中的 URL 是什么?

标签: php html forms mysqli


【解决方案1】:

正如 Hamish 在另一个答案中指出的那样,您将本地文件路径与远程 URL 混淆了。虽然 PHP 可以很好地处理硬盘上的文件,但您显然不想将其暴露给外界。因此,您依赖 Apache 将 certain 文件路径转换为 ​​URL。根据您上面的 cmets,我认为这应该可以解决问题。请注意本地文件路径 ($file_location) 与 URL ($image_url) 的占位符变量。

<?php
require 'config/init.php';
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
    || ($_FILES["file"]["type"] == "image/jpeg")
    || ($_FILES["file"]["type"] == "image/jpg")
    || ($_FILES["file"]["type"] == "image/pjpeg")
    || ($_FILES["file"]["type"] == "image/x-png")
    || ($_FILES["file"]["type"] == "image/png"))
    && ($_FILES["file"]["size"] < 20000000000000000000000)
    && in_array($extension, $allowedExts)
) {
    if ($_FILES["file"]["error"] > 0) {
        echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
    } else {
        echo "Upload: " . $_FILES["file"]["name"] . "<br>";
        echo "Type: " . $_FILES["file"]["type"] . "<br>";
        echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
        echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";
        $local_file = "/customers/2/e/e/jessicarosedavidson.co.uk//httpd.www/AIDAc3410801/assets/images/" . $_FILES["file"]["name"];
        $image_url = "/AIDAc3410801/assets/images/" . $_FILES["file"]["name"];

        if (file_exists($local_file)) {
            echo $_FILES["file"]["name"] . " already exists. ";
        } else {
            move_uploaded_file($_FILES["file"]["tmp_name"], $local_file);
            echo "Stored in: " . $local_file ."<br>";
            echo "<img src=\"$image_url\">";
        }
    }
} else {
  echo "Invalid file";
}
?>

【讨论】:

  • 是的!有用!!谢谢!您知道我如何将其保存给特定用户并允许在他们每次登录时显示吗? @miken32
  • 想必您已经将用户存储在数据库中,只需添加一个字段来存储图像文件名即可。如果遇到麻烦,请尝试一些事情并发布另一个问题。
  • 非常感谢您的帮助,非常感谢! @miken32
【解决方案2】:

您正在像这样回显 HTML 标记图像标记:

<img src="/customers/2/e/e/jessicarosedavidson.co.uk//httpd.www/AIDAc3410801/assets/images/SOME_IMAGE.JPG">

这不是客户端浏览器的有效网址。您需要返回对该图像有效的 URL,由您的服务器提供。

编辑:实际上,情况要糟糕得多,因为您使用相同的路径定义 $img,然后用路径 再次预先附加它,因此您的 URL 看起来像:

<img src="/customers/2/e/e/jessicarosedavidson.co.uk//httpd.www/AIDAc3410801/assets/images//customers/2/e/e/jessicarosedavidson.co.uk//httpd.www/AIDAc3410801/assets/images/SOME_IMAG.JPG">

检查浏览器的输出。

【讨论】:

  • 我试过 echo ""; ...还是行不通? @Hamish
  • $img 仍然必须是浏览器可以访问的东西。即,您可以将 URL 放入浏览器以查看图像(通过互联网)。
猜你喜欢
  • 2016-03-05
  • 2020-06-29
  • 1970-01-01
  • 2011-06-01
相关资源
最近更新 更多