Перечислять файлы изображений с помощью PHP - и учитывать регистр - PullRequest
0 голосов
/ 24 августа 2010

В раскрывающемся каталоге для файлов изображений собраны варианты по буквам, например:

Bonsai.jpg, BONSAI.jpg, Bonsai.JPG, bonsai.jpg  

Я создаю веб-приложение, использующее CodeIgniter для управления этими документами на удаленном сервере. Это означает использование

  1. file_exists () или is_file () для проверки наличие файла
  2. HTML-тег img для графического отображения файла

Но оба эти инструмента используют первое найденное совпадение, независимо от регистра. Как я могу справиться с этим?

(я заметил такой же вопрос, как и этот , но для Delphi вместо PHP.)

Ответы [ 2 ]

1 голос
/ 24 августа 2010

При приеме изображений я всегда переименовываю их, например, используя опцию шифрования имен файлов CI класса File Upload, чтобы избежать подобных проблем. В противном случае это может привести к большой головной боли.

РЕДАКТИРОВАТЬ: добавил мой комментарий на ОП ниже

Вы можете легко написать скрипт, который помещает все имена файлов в массив, идентифицирует дубликаты и добавляет _1 к их имени. Теперь у вас есть только уникальные имена файлов. Затем вы переводите все в нижний регистр. Для всех существующих и новых файлов вы шифруете имена файлов в строку из 32 символов. Пакетная обработка имен файлов, как это на самом деле довольно легко. Просто на всякий случай сохраняйте резервные копии всех файлов, и очень мало что может пойти не так.

Codeigniter имеет несколько полезных функций, таких как get_filenames() помощника по файлам, который помещает все файлы в указанном каталоге в массив, и помощника по безопасности dohash(), который шифрует имена файлов. Для будущих загрузок установите encrypt_name предпочтение TRUE

1 голос
/ 24 августа 2010

Но оба эти инструмента используют первое найденное совпадение, независимо от регистра

Они определенно не должны - по крайней мере, не в файловой системе, чувствительной к регистру, как в файловой системе Linux по умолчанию (она все еще называется ext2?). Хотя сомнительной практикой является размещение этих четырех файлов в одном и том же каталоге IMO, ни file_exists(), ни обслуживание веб-ресурсов не должны отображать описанное вами поведение.

В Windows все по-другому: FAT и NTFS не чувствительны к регистру. В вашем примере только один из четырех файлов, которые вы упомянули, может находиться в одном каталоге.

...