我有一些问题。
我需要检查网址是否是图片网址?我怎么能这样做?
示例:如果我放http://www.google.com/不是图片网址。
但如果我提出http://www.google.com/profiles/c/photos/private/AIbEiAIAAABECK386sLjh92M4AEiC3ZjYXJkX3Bob3RvKigyOTEzMmFmMDI5ODQ3MzQxNWQxY2VlYjYwYmE2ZTA4YzFhNDhlMjBmMAEFQ7chSa4PMFM0qw02kilNVE1Hpw或http://www.hoax-slayer.com/images/worlds-strongest-dog.jpg是图片网址。
答案 0 :(得分:22)
如果您想完全确定,并且您的PHP已启用远程连接,您可以使用
getimagesize('url');
如果它返回一个数组,它是PHP识别的图像类型,即使图像扩展名不在url中(按照你的第二个链接)。您必须记住,此方法将为每个请求建立远程连接,因此可能缓存已在数据库中探测的URL以降低连接。
答案 1 :(得分:11)
您可以向服务器发送HEAD request,然后检查内容类型。这样你至少知道服务器“认为”类型是什么。
答案 2 :(得分:4)
您可以使用如下所示的getimagesize功能检查网址是否为图片。
function validImage($file) {
$size = getimagesize($file);
return (strtolower(substr($size['mime'], 0, 5)) == 'image' ? true : false);
}
$image = validImage('http://www.example.com/image.jpg');
echo 'this image ' . ($image ? ' is' : ' is not') . ' an image file.';
答案 3 :(得分:3)
我认为这个想法是通过curl
获取标题网址的内容并检查标题
调用curl_exec()
获取网页后,调用curl_getinfo()
从HTTP标头中获取内容类型字符串
了解如何在此链接中执行此操作:
http://nadeausoftware.com/articles/2007/06/php_tip_how_get_web_page_content_type#IfyouareusingCURL
答案 4 :(得分:3)
可以使用:
$is = @getimagesize ($link);
if ( !$is ) $link='';
elseif ( !in_array($is[2], array(1,2,3)) ) $link='';
elseif ( ($is['bits']>=8) ) $srcs[] = $link;
答案 5 :(得分:1)
这是一种需要卷曲的方法,但比getimagesize更快,因为它不会下载整个图像。 免责声明:它会检查标题,但它们并不总是正确的。
function is_url_image($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
$output = curl_exec($ch);
curl_close($ch);
$headers = array();
foreach(explode("\n",$output) as $line){
$parts = explode(':' ,$line);
if(count($parts) == 2){
$headers[trim($parts[0])] = trim($parts[1]);
}
}
return isset($headers["Content-Type"]) && strpos($headers['Content-Type'], 'image/') === 0;
}
答案 6 :(得分:0)
$ext = strtolower(end(explode('.', $filename)));
switch($ext)
{
case 'jpg':
///Blah
break;
}
硬版(只是尝试)
//Turn off E_NOTICE reporting first
if(getimagesize($url) !== false)
{
//Image
}