【问题标题】:Function to check if website is an image检查网站是否为图像的功能
【发布时间】:2018-01-10 21:29:13
【问题描述】:

我有一个功能可以检查 url 是否是图像。 问题是当用户发布 gif 图像时它不起作用。 它显示 X 而不是图像。该网站是 html 格式,但它以图像/gif 格式获取。

有什么想法吗?

用户发布的内容:https://media.giphy.com/media/CwbErAWpTQDxS/giphy.gif 这是一个 html 页面而不是 gif。

我的功能:

function isImage($url){
$url_headers=get_headers($url, 1);

if($url_headers[0] == 'HTTP/1.1 404 Not Found') {
   $url_exists = false;
} 
else {
    $url_exists = true;
}

if($url_exists){
    if(isset($url_headers['Content-Type'])){
        $type=strtolower($url_headers['Content-Type']);

        $valid_image_type=array();
        $valid_image_type['image/png']='';
        $valid_image_type['image/jpg']='';
        $valid_image_type['image/jpeg']='';
        $valid_image_type['image/jpe']='';
        $valid_image_type['image/gif']='';

        if(isset($valid_image_type[$type])){
            return true;
        }
        else{
            return false;
        }
    }
}
}

【问题讨论】:

  • @LawrenceCherone 它在这里显示图像/gif
  • 您的问题到底是什么?此 url 返回的内容类型为“text/html”。
  • 从该 url 返回的标头是 Content-Type => image/gif
  • php curl 获取标题然后检查你得到了什么?
  • 这与你的功能无关。检查下面@TimG 的答案。

标签: javascript php html image


【解决方案1】:

我相信 giphy 正在嗅探 http 标头“接受” - 或者可能是用户代理字符串。在任何情况下,当我使用工具显示该 url 的标题时,我会看到“image/gif”,但 chrome 检查器会显示以 text/html 作为内容类型交付的网页。

giphy 有一个关于如何嵌入的网页。使用 ajax 可能有一种解决方法,但这超出了您的问题的范围。事实上,giphy 似乎不想要盗链。

Giphy Article on Embedding Images

【讨论】:

  • @RickJoe 除非您想对其进行硬编码,并且拒绝所有以 media.giphy.com 开头的 URL
  • 我会检查 url 是否存在“giphy.com”并进行相应调整。要么您想禁止添加 giphy.com 图像,要么您需要在应用程序的其他地方使用特殊逻辑调整显示方式。
  • @TimG 我很好奇,所以我用 curl 做了一个测试。你是对的,它确实是 Accept 标头——只要它包含“text/html”,giphy 就会提供 html 页面而不是 gif。
  • @rlanvin 感谢您的调查 - 我非常好奇。 :)
  • if (strpos($url, 'media.giphy.com') == true) { return false; }
猜你喜欢
  • 1970-01-01
  • 2022-11-21
  • 1970-01-01
  • 1970-01-01
  • 2017-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多