这是一个问题,你可以在网络上的任何地方看到各种答案:

$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];

etc.

然而,总是有“最好的方法”,它应该是堆栈溢出。


当前回答

我尝试了一个简单的解决方案,它可能会帮助其他人从具有get参数的URL中获取文件名

<?php

$path = "URL will be here";
echo basename(parse_url($path)['path']);

?>

谢谢

其他回答

这里有一个例子。假设$filename是“example.txt”,

$ext = substr($filename, strrpos($filename, '.', -1), strlen($filename));

因此$ext将为“.txt”。

很抱歉“简短的问题;但不是简短的回答”

PATH示例1

$path = "/home/ali/public_html/wp-content/themes/chicken/css/base.min.css";
$name = pathinfo($path, PATHINFO_FILENAME);
$ext  = pathinfo($path, PATHINFO_EXTENSION);
printf('<hr> Name: %s <br> Extension: %s', $name, $ext);

URL示例2

$url = "//www.example.com/dir/file.bak.php?Something+is+wrong=hello";
$url = parse_url($url);
$name = pathinfo($url['path'], PATHINFO_FILENAME);
$ext  = pathinfo($url['path'], PATHINFO_EXTENSION);
printf('<hr> Name: %s <br> Extension: %s', $name, $ext);

示例1的输出:

Name: base.min
Extension: css

示例2的输出:

Name: file.bak
Extension: php

工具书类

https://www.php.net/manual/en/function.pathinfo.phphttps://www.php.net/manual/en/function.realpath.phphttps://www.php.net/manual/en/function.parse-url.php

有时不使用pathinfo($path,pathinfo_EXTENSION)很有用。例如:

$path = '/path/to/file.tar.gz';

echo ltrim(strstr($path, '.'), '.'); // tar.gz
echo pathinfo($path, PATHINFO_EXTENSION); // gz

还要注意,pathinfo无法处理一些非ASCII字符(通常它只是从输出中抑制它们)。在扩展中,这通常不是一个问题,但了解这一警告也无妨。

只要它不包含路径,您也可以使用:

array_pop(explode('.', $fname))

其中$fname是文件的名称,例如:my_picture.jpg。结果将是:jpg

这会奏效的

$ext = pathinfo($filename, PATHINFO_EXTENSION);