您可以在网上随处可见这个问题,并给出各种答案:
$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 资源路径。
享受
$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 示例