2

我有这段代码,如果生成了图像,它应该显示图像,如果没有,则写“无图像”。

<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条件总是返回“未能打开流”。

有人知道如何让它工作吗?

4

3 回答 3

1

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

  • 你的脚本是 /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- 运行脚本的目录的子目录。也不存在,你得到错误。

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

于 2013-05-21T14:25:45.777 回答
1

试试这个而不是 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;
} 
于 2013-05-21T14:25:55.253 回答
0

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

您可以在文档加载时使用 jQuery 获取图像,并决定是显示图像还是显示“无图像”。

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

CSS

#mynoimg { display: none; }

HTML

<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
});
于 2013-05-21T14:47:48.593 回答