Нечувствительный к регистру file_exists для большого списка файлов - PullRequest
0 голосов
/ 31 августа 2018

У меня есть папка сервера с большим количеством файлов со случайным именем со значением 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;

}

1 Ответ

0 голосов
/ 31 августа 2018

Я не могу комментировать, хотя это может быть ответом на ваш вопрос: Нет. На данный момент в вашем текущем состоянии, похоже, что вы должны использовать эту логику. Однако вы можете создать логику, чтобы взять те файлы, которые имеют заглавные буквы, и использовать copy($filename,strtolower($filename)) в папке, чтобы сделать их строчными, а затем удалить старые имена файлов с заглавными буквами. , Затем в будущем при добавлении файлов ко многим strtolower($new_file_name) перед добавлением файла в систему. Я согласен с вами, хотя эта логика кажется медленной, особенно с тысячами файлов.

Это противоречит тому, что вы не можете переименовывать / преобразовывать имена файлов, хотя, как только вы это сделаете, это будет единственный раз, когда вам придется их переименовывать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...