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

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

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


当前回答

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

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

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

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

其他回答

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

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

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

我发现pathinfo()和SplFileInfo解决方案对于本地文件系统上的标准文件很好,但如果您使用远程文件,可能会遇到困难,因为有效图像的URL可能有#(片段标识符)和/或?(查询参数),这两个解决方案都将(不正确)作为文件扩展名的一部分。

我发现这是一种在URL上使用pathinfo()的可靠方法,首先对其进行解析以去除文件扩展名后不必要的混乱:

$url_components = parse_url($url); // First parse the URL
$url_path = $url_components['path']; // Then get the path component
$ext = pathinfo($url_path, PATHINFO_EXTENSION); // Then use pathinfo()

pathinfo是一个数组。我们可以检查目录名、文件名、扩展名等:

$path_parts = pathinfo('test.png');

echo $path_parts['extension'], "\n";
echo $path_parts['dirname'], "\n";
echo $path_parts['basename'], "\n";
echo $path_parts['filename'], "\n";

在PHP中获取文件扩展名的最简单方法是使用PHP的内置函数pathinfo。

$file_ext = pathinfo('your_file_name_here', PATHINFO_EXTENSION);
echo ($file_ext); // The output should be the extension of the file e.g., png, gif, or html

您也可以尝试以下操作:

 pathinfo(basename($_FILES["fileToUpload"]["name"]), PATHINFO_EXTENSION)