У меня есть папка сервера с большим количеством файлов со случайным именем со значением guid (пример файла: c3c1a48e-a798-41bd-bd70-66ffdc619963.jpg
).
Мне нужно выполнить поиск в этой папке без учета регистра, так как там может быть прописная (или смешанная) версия того же имени файла. (Я не могу преобразовать существующие файлы во все строчные имена файлов.)
Ответы на этот вопрос
PHP-регистрочувствительная версия file_exists () предоставляет функцию (показанную ниже), которая «глобализирует» всю папку в массив, а затем выполняет поиск по каждому элементу в массиве.
Это может показаться немного медленным / неэффективным, особенно при поиске в папке с большим количеством (тысяч) файлов.
Есть ли более эффективный способ поиска имени файла без учета регистра? Или использование цикла foreach, как показано в приведенном ниже коде, «достаточно эффективно»?
(Это код, рекомендованный вышеупомянутым вопросом)
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;
}