Статьи

Совет: перебирайте папки с помощью PHP Glob ()

Вы все еще используете opendir () для циклического перемещения по папкам в PHP? Разве это не требует много повторяющегося кода каждый раз, когда вы хотите найти папку? К счастью, PHP glob () — намного более умное решение.


Вот пример вывода некоторой информации из папки, используя традиционную функцию opendir ().

Это должно выглядеть несколько знакомым. Мы можем значительно сократить код выше с помощью:

Разве это не намного проще? Хотите узнать, как работает метод? Если да, то давайте продолжим.

glob () поддерживает всего два аргумента, второй аргумент является необязательным. Первый аргумент — это путь к папке, однако он немного мощнее.


Этот первый аргумент поддерживает шаблон. Это означает, что вы можете ограничить поиск определенными типами файлов или даже несколькими каталогами одновременно, используя несколько звездочек «*». Давайте предположим, что у вас есть веб-сайт, который позволяет пользователям загружать изображения ( только потому, что я прочитал это ). Каждый пользователь имеет свою собственную папку в папке «userImages». Внутри этих папок находятся две дополнительные папки, называемые «HD» и «TN», для изображений высокой четкости (полноразмерных) и миниатюр. Давайте представим, что вы хотите пройтись по всем папкам «TN» ваших пользователей и напечатать имена файлов. Это потребовало бы относительно большого фрагмента кода, если бы вы использовали open_dir (); однако с glob () это легко.

Это будет искать userImages / any / TN / any и вернет список файлов, которые соответствуют шаблону.

Мы можем даже пойти дальше и конкретизировать, включив формат файла в наш оператор foreach:

Теперь, это только вернет Jpegs.

Это становится еще лучше. Что если, например, вам нужны Jpegs, но также и Gifs; ничего больше? Или что, если вы хотите печатать только имена папок? Это где второй аргумент вступает в игру.


Второй аргумент, как упоминалось ранее, является необязательным. Однако он предоставляет очень хороший набор дополнительных флагов. Это позволит вам изменить поведение вашего glob ().

  • GLOB_MARK : добавляет косую черту в каждый возвращенный каталог
  • GLOB_NOSORT : возвращать файлы по мере их появления в каталоге (без сортировки)
  • GLOB_NOCHECK : вернуть шаблон поиска, если не найдено ни одного файла, соответствующего ему
  • GLOB_NOESCAPE : обратные косые черты не заключают в кавычки
  • GLOB_BRACE : расширяет {a, b, c}, чтобы соответствовать ‘a’, ‘b’ или ‘c’
  • GLOB_ONLYDIR : возвращать только те записи каталога, которые соответствуют шаблону
  • GLOB_ERR : остановка при ошибках чтения (например, нечитаемые каталоги), ошибки по умолчанию игнорируются

Как видите, потенциальные требования, которые мы отметили в конце шага 1, легко можно исправить с помощью GLOB_BRACE:

который вернет это:

Если мы хотим печатать только имена подпапок, мы можем использовать GLOB_ONLYDIR:

который напечатает:


Этот метод доступен с PHP 4.3, однако, как ни странно, он используется не очень часто. Я не изучал это до самого позднего вечера. Теперь я часто использую glob () при загрузке плагинов в мою среду:

Это все; Я надеюсь, вам понравился этот быстрый совет, и дайте мне знать, если у вас есть какие-либо вопросы!