我正在尝试考虑在PHP中实现不区分大小写的file_exists函数的最快方法.我最好的方法是枚举目录中的文件,然后执行strtolower()到strtolower()比较,直到找到匹配项?
Kir*_*met 25
我使用了注释中的源来创建这个函数.如果找到则返回完整路径文件,否则返回FALSE.
对文件名中的目录名不起作用.
function fileExists($fileName, $caseSensitive = true) {
if(file_exists($fileName)) {
return $fileName;
}
if($caseSensitive) return false;
// Handle case insensitive requests
$directoryName = dirname($fileName);
$fileArray = glob($directoryName . '/*', GLOB_NOSORT);
$fileNameLowerCase = strtolower($fileName);
foreach($fileArray as $file) {
if(strtolower($file) == $fileNameLowerCase) {
return $file;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
这个问题已有几年历史,但是它与多个重复项相关联,因此这是一种简单的方法。
返回false如果$filename在任何情况下没有在找到$path返回的第一个文件或实际文件名glob(),如果它是在任何情况下发现:
$result = current(preg_grep("/".preg_quote($filename)."/i", glob("$path/*")));
Run Code Online (Sandbox Code Playgroud)
glob$filename无论如何,Grep 都不i区分大小写current 返回数组的第一个文件名删除current()以返回所有匹配的文件。这在区分大小写的文件系统上很重要,因为IMAGE.jpg并且image.JPG可以同时存在。