我正在编写脚本以从网站获取图像。一切都很好,但后来我注意到有些网站的图像格式如下:
http://site-name/images/dude-i-m-batman.jpg?1414151413
http://site-name/images/dude-i-m-batman.jpg?w=300
现在我正在通过
处理它$file = substr($media,0, strrpos($image, '.') + 4);
我只是想知道这是一个好习惯还是有更好的方法。
我已尝试过pathinfo和其他一些方法,但所有返回扩展都带有查询字符串。
由于
答案 0 :(得分:8)
使用parse_url
解析网址,检索路径部分:
$datum = parse_url($url);
$parts = pathinfo($datum['path']);
$ext = $parts['extension'];
如果getImageInfo($full_url)
允许,您也可以使用fopen_wrappers
,并检索图片信息,例如宽度,高度,最重要的是mime_type。
这是因为你会发现几个没有扩展名或错误文件的文件,放在那里诱骗浏览器下载为图像,并相信浏览器会识别图像格式(在那里,做到了:-()
答案 1 :(得分:2)
我不确定您是想要扩展名还是(从当前代码判断)完整路径(减去任何查询字符串)。
以下是:
$file = "http://site-name/images/dude-i-m-batman.jpg?1414151413";
preg_match('/^([^\?]+)(?:\?.*)?/', $file, $path_noQS);
preg_match('/(?<=\.)(\w{2,5})(?:\?.*)?/', $file, $extension);
echo $path_noQS[1]; //path, without QS
echo $extension[1]; //extension
答案 2 :(得分:2)
显然你现在做的有一些缺点。其中一个你已经注意到了自己的:
.jpeg
)所以你想要的是从URL获取路径:
$imagePath = parse_url($imageUrl, PHP_URL_PATH);
然后你想从那条路上得到扩展名:
$imageName = pathinfo($imagePath, PATHINFO_EXTENSION);
完成了。你不是第一个需要的人,所以这项工作已经存在。
答案 3 :(得分:0)
您的解决方案仅适用于3个字符的扩展名。如果您知道所有扩展名将是3个字符,那么这是一个非常可行的解决方案。否则:
$ext = pathinfo($filename, PATHINFO_EXTENSION);
如果你有正确的文件名
,那肯定会有用如果出于某种原因无效,您可以使用:
$ext = end(explode('.', $filename));
$ext = substr(strrchr($filename, '.'), 1);
$ext = substr($filename, strrpos($filename, '.') + 1);
$ext = preg_replace('/^.*\.([^.]+)$/D', '$1', $filename);
$exts = split("[/\\.]", $filename);
$n = count($exts)-1;
$ext = $exts[$n];
答案 4 :(得分:0)
可能是这样的
$parsedUrl = parse_url('http://site-name/images/dude-i-m-batman.jpg?1414151413');
$parsedFileInfo = pathinfo($parsedUrl['path']);
echo $parsedFileInfo['extension'];
答案 5 :(得分:0)
$u = 'http://site-name/images/dude-i-m-batman.zip.jpg?1414151413?1234';
$u = explode('?', $u, 2 ); // ignore everything after the first question mark
$ext = end(explode('.',$u[0])); // last 'extension'