尝试从其他人的代码中学习,我看到很多方法可以从扩展名中删除文件名,但是大多数方法似乎过于本地化,因为它们假设了某种条件。例如 :
这将假设只有 3 个字符的扩展名(如.txt
, .jpg
, .pdf
)
substr($fileName, 0, -4);
或者
substr($fileName, 0, strrpos($fileName, '.'));
但这可能会导致文件名出现问题,例如.jpeg
, .tiff
.html
。或只有 2 个喜欢.js
或.pl
(浏览此列表显示某些文件名只能有 1 个字符,而有的则多达 10 个(!))
我见过的其他一些方法依赖于这一点(.
)
例如 :
return key(explode(“.”, $filename));
可能会导致文件名出现问题,例如20121029.my.file.name.txt.jpg
同样在这里 :
return preg_replace('/\.[^.]*$/', '', $filename);
有些人使用pathinfo($file)
和/或 basename()
(它总是安全的吗??)
basename($filename);
和许多其他方法..
所以我的问题有几个部分:
“剥离”文件扩展名的最佳方法是什么?(有要点)
“获取”文件扩展名(没有重点)和/或检查它的最佳方法是什么
php 自己的函数(基本名称)是否会识别所有扩展名,无论它们可能多么奇特或文件名是如何构造的?
如果操作系统对此事有任何影响怎么办?(赢,linux,unix...)
- 所有那些我想得到答案的小问题都可以总结为一个整体的问题: 是否有一个防弹的、整体的、始终有效的、防故障的、最佳实践的、über_function将在所有和任何条件下工作??
编辑 I -另一个文件扩展名列表