【问题标题】:php/jquery - check if image in url really existsphp/jquery - 检查 url 中的图像是否真的存在
【发布时间】:2012-05-07 18:39:35
【问题描述】:

我发现了一种检查页面是否真的存在的好方法:

$headers=@get_headers($imageurl);
if(strpos($headers[0],'200')===false){
    echo "not valid";
    exit;
}

不过,我需要实现的是检查该页面上是否真的只有一张图片。 例如,当您尝试以下链接时: www.google.com/image.jpg 它将返回 200,因为 Google 有它自己的错误页面 - 但是,应该可以发现不仅该页面上没有图像,而且图像不是该页面上唯一的东西,即使有其他内容(比如这里:http://www.kapstadt-entdecken.de/wp-content/gallery/robben-island/1robben-island.jpg)。

我怎样才能做到这一点?

非常感谢!

丹尼斯

【问题讨论】:

    标签: php image url


    【解决方案1】:

    您可能希望在获取标头时使用 HEAD 请求(默认情况下不这样做):

    stream_context_set_default(array(
        'http' => array(
            'method' => 'HEAD'
        )
    ));
    

    其次,您可以将第二个参数传递给get_headers 为您解析:

    $headers = get_headers($imageurl, 1);
    

    然后,您可以正常检查其余部分:

    if (strpos($headers[0], '200') === false) {
        echo "not valid";
        exit;
    }
    
    if (isset($headers['Content-Type']) && 0 === strncmp($headers['Content-Type'], 'image/', 6)) {
        echo "valid image";
    } else {
        echo "probably not an image";
    }
    

    【讨论】:

    • 我只需要检查它是否不起作用,因此我将其更改为: if (!isset($headers['Content-Type']) && 0 === strncmp($headers ['Content-Type'], 'image/', 6)) { echo "not valid";出口; } 不幸的是不起作用...
    • 倒数是!isset($headers['Content-Type']) || 0 !== strncmp($headers['Content-Type'], 'image/', 6)
    • 不,我弄错了。它就像一个魅力。虽然逆显然只能这样工作: if(!isset($headers['Content-Type']) && 0 === strncmp($headers['Content-Type'], 'image/', 6))
    • 但我同意它实际上应该是 || 0 !=
    • 您应该var_dump($headers); 找出发生这种情况的原因,因为您的反转逻辑是错误的,这不应该起作用。
    【解决方案2】:

    还有 get_headers ...其中之一将是

    image/png
    image/jpeg
    image/gif
    

    所以

    $isImage = false;
    foreach($headers as $header){
        if(strpos($header,'image/')==true){
            $isImage = true;
        }
    }
    

    【讨论】:

      【解决方案3】:
      $headers = @get_headers($imageurl);
      
      $is_image = false;
      foreach ($headers as $header) {
          if (strpos($header, 'Content-Type: image/') === 0) {
              $is_image = true;
              break;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2019-01-16
        • 2011-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多