协慌网

登录 贡献 社区

如何在 PHP 中获得文件扩展名?

您可以在网上随处可见这个问题,并给出各种答案:

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

等等。

但是,始终存在 “最佳方法”,并且应该在堆栈溢出中使用。

答案

使用其他脚本语言的人们总是认为自己的语言更好,因为他们具有内置功能而不是 PHP(我现在正在研究 Pythonistas :-)。

实际上,它确实存在,但是很少有人知道。符合pathinfo()

$ext = pathinfo($filename, PATHINFO_EXTENSION);

这是快速且内置的。 pathinfo()可以根据传递给它的常量为您提供其他信息,例如规范路径。

请记住,如果您希望能够处理非 ASCII 字符,则需要先设置语言环境。例如:

setlocale(LC_ALL,'en_US.UTF-8');

另外,请注意,这没有考虑文件内容或 mime 类型,您只能得到扩展名。但这就是您要的。

最后,请注意,这仅适用于文件路径,不适用于使用 PARSE_URL 覆盖的 URL 资源路径。

享受

pathinfo()

$path_info = pathinfo('/foo/bar/baz.bill');

echo $path_info['extension']; // "bill"

范例网址: http://example.com/myfolder/sympony.mp3?a=1&b=2#XYZ

A)不要使用建议的不安全PATHINFO

pathinfo($url)['dirname']   🡺 'http://example.com/myfolder'
pathinfo($url)['basename']  🡺 'sympony.mp3?a=1&b=2#XYZ'         // <------- BAD !!
pathinfo($url)['extension'] 🡺 'mp3?a=1&b=2#XYZ'                 // <------- BAD !!
pathinfo($url)['filename']  🡺 'sympony'

B)使用PARSE_URL

parse_url($url)['scheme']   🡺 'http'
parse_url($url)['host']     🡺 'example.com'
parse_url($url)['path']     🡺 '/myfolder/sympony.mp3'
parse_url($url)['query']    🡺 'aa=1&bb=2'
parse_url($url)['fragment'] 🡺 'XYZ'

奖励:查看所有本机 PHP 示例