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

$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.

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


当前回答

还有SplFileInfo:

$file = new SplFileInfo($path);
$ext  = $file->getExtension();

如果传递这样的对象而不是字符串,通常可以编写更好的代码。那么你的代码更能说话了。由于PHP 5.4,这是一行代码:

$ext  = (new SplFileInfo($path))->getExtension();

其他回答

在一行中:

pathinfo(parse_url($url,PHP_URL_PATH),PATHINFO_EXTENSION);

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

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

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

您可以获取特定文件夹中的所有文件扩展名,并使用特定文件扩展名执行操作:

<?php
    $files = glob("abc/*.*"); // abc is the folder all files inside folder
    //print_r($files);
    //echo count($files);
    for($i=0; $i<count($files); $i++):
         $extension = pathinfo($files[$i], PATHINFO_EXTENSION);
         $ext[] = $extension;
         // Do operation for particular extension type
         if($extension=='html'){
             // Do operation
         }
    endfor;
    print_r($ext);
?>
substr($path, strrpos($path, '.') + 1);

$ext=preg_replace('/^.*\.([^.]+)$/D','$1',$fileName);

pregreplace方法我们使用正则表达式搜索和替换。在preg_replace函数中,第一个参数是搜索的模式,第二个参数$1是对第一个(.*)匹配的对象的引用,第三个参数是文件名。

另一种方法是,我们还可以使用strrpos来查找“”的最后一次出现的位置并将该位置递增1,使其从(.)开始分解字符串

$ext=substr($fileName,strrpos($fileName,'.')+1);