PHP检查img SRC是否为图像


php check if img src is image

我有这段代码,如果生成了图像,应该显示图像,如果没有,则写"no image"

<body>
    <?php
        $src = "somescript.php";
    //  if (getimagesize($src)) {
        if (file_exists($src)) {
            echo '<img src="'.$src.'" />';
        } else {
            echo "no image";
        }
    ?>
</body>

somescript.php是生成图像的本地文件,或者die();

问题是:
file_exists条件总是不返回任何东西。
getimagesize条件总是返回"failed to open stream"。

有人知道怎么让它工作吗?

除非您将完整的URL传递给filexists(),否则它将在本地文件系统路径上工作,该路径可能与您传递给<img>标记的图像的URL没有任何关系。例如

  • 你的脚本是/home/sites/example.com/html/foo/picture.php
  • 你的图片存放在/home/sites/example.com/html/images/…
  • 你试图将/images/foo.jpg传递给标签

则将执行以下url ->路径查找:

您通过file_exists('/images/foo.jpg'): PHP将检查本地系统路径/images/foo.jpg。您没有从服务器的根目录提供站点服务,因此此操作失败。

您尝试file_exists('images/foo.jpg'): PHP将检查/home/site/example.com/html/foo/images/foo.jpg -您的脚本运行目录的子目录。Also不存在,你得到false

您通常不能像您看起来那样混合使用文件系统空间和url空间路径。这两个空格是相关的,但不是直接相连的

试试这个代替file_exists

$src = 'somescript.php';
$src_headers = @get_headers($src);
if($file_headers[0] == 'HTTP/1.1 404 Not Found') {
    $exists = false;
}
else {
    $exists = true;
} 

由于对于每个请求只生成一次图像似乎是合适的,因此我将在客户端处理此问题。

你可以在文档加载时使用jQuery获取图像,并决定是显示图像还是不显示图像

或者您可以保留img标记,但使用javascript来检测图像中的错误:

CSS

#mynoimg { display: none; }

<img id="myimg" src="somescript.php" />
<div id="mynoimg">no image</div>
Javascript

document.getElementById("myimg").onerror = function() {
    this.style.display = "none";
    document.getElementById("mynoimg").style.display = "block";
}

或使用jQuery:

$("#myimg").error(function () { // when image doesn't load correctly
    $(this).hide();             // hide it
    $("#mynoimg").show();       // and show "no image" message instead
});