获取纯扩展名的文件名

时间:2012-07-09 16:05:09

标签: php

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

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

由于

6 个答案:

答案 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)

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'