1

我正在编写脚本以从站点获取图像。一切都很好,但后来我注意到有些网站的图像格式如下:

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 和其他几种方法,但都返回带有查询字符串的扩展名。

谢谢

4

6 回答 6

8

用 解析 URL parse_url,检索路径部分:

 $datum = parse_url($url);

 $parts = pathinfo($datum['path']);

 $ext = $parts['extension'];

getImageInfo($full_url)如果允许,您也可以使用fopen_wrappers,并检索图像信息,例如宽度、高度,最重要的是,mime_type。

这是因为您会发现几个没有扩展名或错误的文件,将其放在那里以欺骗浏览器下载为图像并相信浏览器仍然会识别图像格式(去过那里,做到了:-()

于 2012-07-09T16:09:46.527 回答
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
于 2012-07-09T16:14:28.997 回答
2

显然你现在做的事情有一些不足之处。其中一个你已经注意到了你自己的:

  • 并非所有 URL 都以文件扩展名结尾。
  • 并非所有文件扩展名都是三个字母(例如.jpeg

所以你想要的是从一个 URL 获取路径:

$imagePath = parse_url($imageUrl, PHP_URL_PATH);

然后您想从该路径获取扩展名:

$imageName = pathinfo($imagePath, PATHINFO_EXTENSION);

并做了。您不是第一个需要它的人,因此该工作已经存在功能。

于 2012-07-09T16:16:15.267 回答
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];
于 2012-07-09T16:07:34.437 回答
0

可能是这样的

$parsedUrl = parse_url('http://site-name/images/dude-i-m-batman.jpg?1414151413');
$parsedFileInfo = pathinfo($parsedUrl['path']);
echo $parsedFileInfo['extension'];              
于 2012-07-09T16:10:58.497 回答
0

http://codepad.org/KXZwKCjs

$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'
于 2012-07-09T16:11:06.660 回答