php检查img src是否是图像

时间:2013-05-21 14:11:29

标签: php image src

我有这个代码,如果生成一个代码就会显示图像,否则就会显示“无图像”。

<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条件始终返回“无法打开流”。

任何人都知道如何让它发挥作用?

3 个答案:

答案 0 :(得分:1)

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

  • 您的脚本是/home/sites/example.com/html/foo/picture.php
  • 您的图片位于/home/sites/example.com/html/images / ...
  • 你正试图将/images/foo.jpg传递给标签

然后是以下网址 - &gt;路径查找将会发生:

传递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空间路径。这两个空格是相关的,但没有直接连接。

答案 1 :(得分: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;
} 

答案 2 :(得分: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
});