我有一个功能来检查url是否是图像。 问题是,当用户发布gif图像时,它不起作用。 它显示X而不是图像。该网站是html,但它将其作为image / 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;
}
}
}
}
答案 0 :(得分:3)
我相信giphy正在嗅探http标题“accept” - 或者也许是用户代理字符串。在任何情况下,当我使用工具显示该网址的标题时,我会看到“image / gif”,但Chrome检查员会显示一个网页,其中包含text / html作为内容类型。
giphy有一个关于如何嵌入的网页。使用ajax可能有一种解决方法,但这超出了你的问题的范围。现在看来giphy似乎不想要热链接。