如何在PHP中获得文件扩展名? PARSE_URL PATHINFO所有本机PHP示例

问题描述 投票:717回答:27

这是一个问题,您可以在网络上到处阅读并获得各种答案:

$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 file-extension
27个回答
1757
投票

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

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

pathinfo()

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

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

pathinfo()

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

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

享受


7
投票
您也可以尝试这个(它在PHP 5. *和7上有效:]

5
投票
pathinfo

5
投票
快速修复就是这样。

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

5
投票
$info = new SplFileInfo('test.zip'); echo $info->getExtension(); // ----- Output -----> zip 是一个数组。我们可以检查

目录名,文件名,扩展名


5
投票
对不起...“简短问题;但不是简短答案”

3
投票
这将起作用

3
投票
[我发现https://www.php.net/manual/en/function.pathinfo.phphttps://www.php.net/manual/en/function.realpath.php解决方案对于本地文件系统上的标准文件效果很好,但是如果您正在使用远程文件,则可能会遇到麻烦,因为有效图像的URL可能带有https://www.php.net/manual/en/function.parse-url.php (片段标识符)和/或URL末尾的$ext = pathinfo($filename, PATHINFO_EXTENSION); (查询参数),这两种解决方案都将(不正确)视为文件扩展名的一部分。

3
投票
您也可以尝试以下方法:

3
投票
?

165
投票

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


2
投票
使用pathinfo()。这是所有比较方法中最快的方法。

1
投票
如果您正在寻找速度(例如在路由器中),则可能不想对所有内容进行标记化。许多其他答案将失败,并带有 pathinfo(basename($_FILES["fileToUpload"]["name"]), PATHINFO_EXTENSION)

1
投票
尽管“最佳方法”值得商,,但出于某些原因,我认为这是最佳方法:

1
投票
您可以在特定文件夹中获取所有文件扩展名,并使用特定文件扩展名进行操作:

0
投票
实际上是我在找那个。

0
投票
IMO,如果您具有像name.name.name.ext这样的文件名(这很丑,但有时会发生),这是最好的方法:

0
投票
tar.gz

-1
投票
使用

98
投票

示例URL:pathinfo()


58
投票

还有PATHINFO


21
投票

E-satis的响应是确定文件扩展名的正确方法。


14
投票

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


12
投票

1]


11
投票
有时,不使用string(3) "png" string(2) "gz" 非常有用。例如:

7
投票
在PHP中获得文件扩展名的最简单方法是使用PHP的内置函数string(3) "png" string(2) "gz"
© www.soinside.com 2019 - 2024. All rights reserved.