我想从语法中知道url是否是图片.例如:http://www.blah.com/plo52.jpg或png或gif将返回true.如果url以其他扩展名结尾,则该函数将返回false.
谢谢
这不会告诉你它是否真的是一个图像.这只会告诉你它似乎根据网址是:
$url = "http://somedomain.com/images/kittens.jpg";
if(preg_match("/\.(png|jpeg|jpg|gif|bmp)$/i", $url)) {
print "Appears to be an image";
} else {
print "Not an image.";
}
Run Code Online (Sandbox Code Playgroud)
输出:
Appears to be an image
请注意,如果您希望看到通过.php脚本或.aspx脚本提供的图像,则此方法将失败.要进行真正可靠的测试,您需要检查mime类型.
我建议做一个HTTP HEAD请求,所以你不需要下载整个图像,然后根据返回的字符串解析,并确保在Content-Type是image/jpeg,image/pjpeg,image/gif,image/png或类似的图像内容类型.
<?php
function parseImage( $url ) {
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 20 );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_HEADER, true );
curl_setopt( $ch, CURLOPT_NOBODY, true );
$content = curl_exec( $ch );
var_dump($content);
curl_close($ch);
}
parseImage('http://sstatic.net/so/img/logo.png');
Run Code Online (Sandbox Code Playgroud)
返回
字符串'HTTP/1.1 200 OK
缓存控制:max-age = 604800
内容长度:3438
内容类型:image/png
Last-Modified:Sun,2010年1月10日09:14:52 GMT
Accept-Ranges:字节
ETag:"32741b5ed591ca1:0"
服务器:Microsoft-IIS/7.5
日期:2010年1月13日星期三20:37:47 GMT
'(长度= 256)
确实可以欺骗Content-Type标头..但99%的时间它不会,这就是为什么这种方法是可靠的.
| 归档时间: |
|
| 查看次数: |
407 次 |
| 最近记录: |