Php 获取具有纯扩展名的文件名

Php 获取具有纯扩展名的文件名,php,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); 我只是想知道这是一个好的做法还是有更好的办法 我尝试了pathi

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

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


谢谢

您的解决方案仅适用于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];

您的解决方案仅适用于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];
使用解析URL,检索路径部分:

 $datum = parse_url($url);

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

 $ext = $parts['extension'];
如果fopen_包装器允许,您还可以使用getImageInfo$full_url,并检索图像信息,例如宽度、高度,最重要的是,mime_类型

这是因为您会找到几个没有扩展名或扩展名错误的文件,放在那里诱使浏览器下载为图像,并相信浏览器会识别图像格式,这样做:-

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

 $datum = parse_url($url);

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

 $ext = $parts['extension'];
如果fopen_包装器允许,您还可以使用getImageInfo$full_url,并检索图像信息,例如宽度、高度,最重要的是,mime_类型


这是因为您会找到几个没有扩展名或扩展名不正确的文件,放在那里诱使浏览器下载为图像,并相信浏览器会识别图像格式,这样做:-

可能是这样的

$parsedUrl = parse_url('http://site-name/images/dude-i-m-batman.jpg?1414151413');
$parsedFileInfo = pathinfo($parsedUrl['path']);
echo $parsedFileInfo['extension'];              

可能是这样的

$parsedUrl = parse_url('http://site-name/images/dude-i-m-batman.jpg?1414151413');
$parsedFileInfo = pathinfo($parsedUrl['path']);
echo $parsedFileInfo['extension'];              

我不确定您的意思是想要扩展,还是从当前代码判断完整路径减去任何查询字符串

这两个都是:

$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

我不确定您的意思是想要扩展,还是从当前代码判断完整路径减去任何查询字符串

这两个都是:

$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

显然,你现在所做的有一些缺点。其中一个你已经注意到了你自己:

并非所有URL都以文件扩展名结尾。 并非所有文件扩展名都是三个字母,例如jpeg 因此,您需要从URL获取路径:

$imagePath = parse_url($imageUrl, PHP_URL_PATH);
然后您希望从该路径获取扩展名:

$imageName = pathinfo($imagePath, PATHINFO_EXTENSION);

完成了。你不是第一个需要它的人,所以这个工作已经有了功能。

显然,你现在所做的有一些缺点。其中一个你已经注意到了你自己:

并非所有URL都以文件扩展名结尾。 并非所有文件扩展名都是三个字母,例如jpeg 因此,您需要从URL获取路径:

$imagePath = parse_url($imageUrl, PHP_URL_PATH);
然后您希望从该路径获取扩展名:

$imageName = pathinfo($imagePath, PATHINFO_EXTENSION);

完成了。您不是第一个需要这些功能的人,因此该工作已经有了相应的功能。

谢谢!这是最正确的。我想要没有QS的路径,而不仅仅是扩展。谢谢!这是最正确的。我想要不带QS的路径,而不仅仅是扩展。