PHP glob – листинг папок

PHP glob(). glob php

Если вы еще используете функцию opendir() для листинга папок в PHP, то прочтите как можно гораздо проще, и быстрее это сделать с помощью функции glob(). Glob это гораздо грамотное, вы убедитесь, посмотрев примеры использования glob() в php.

PHP glob()  это функция, которая находит пути к файлам соответственно шаблону. Собственно возможность использования шаблонов пути, гораздо упрощает работу с листингом папок и файлов.

Введение

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

$dir = "/etc/php5/"; 

// Open a known directory, and proceed to read its contents  

if (is_dir($dir)) 

{  

    if ($dh = opendir($dir))  

    {  

        while (($file = readdir($dh)) !== false)  

        {  

            echo "filename: $file : filetype: " . filetype($dir . $file) . "\n";  

        }  

        closedir($dh);  

    }  

} 

Если вы делали листинг папки с помощью opendir(), то пример выше вам знаком и нет смысла останавливаться на его разборе. Мы можем значительно сократить php код используя пример ниже:

$dir = "/etc/php5/*";  

// Open a known directory, and proceed to read its contents  

foreach(glob($dir) as $file)  

{  

    echo "filename: $file : filetype: " . filetype($file) . "";  

} 

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

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

Первый аргумент glob() php

Первый аргумент функции glob поддерживает шаблон. Это означает, что вы можете ограничить область поиска несколькими каталогами или определенным типом файлов. Давайте предположим, что у вас есть сайт, который позволяет пользователям загружать изображения в их собственную папку в папке userimages. В этих папках еще папки с названиями HD и TN. HD -  для высокого разрешения (полноразмерных фотографий), и TN для их превью. Давайте предположим, что вы хотите перебрать все превью пользователей в папке TN и вывести имена всех файлов. Это потребует php код значительного размера, если бы использовали open_dir(), однако с glob() в php это решается легко.

foreach(glob('userImages/*/TN/*') as $image)  

{  

    echo "Filename: " . $image . "<br />";  

}

Этот скрипт пройдет по пути userimages/любая папка/TN/любой файл (папка) и вернет листинг папок соответствующих шаблону phpфункции glob().

Filename: userImages/username1/TN/test.jpg  

Filename: userImages/username1/TN/test3.jpg  

Filename: userImages/username1/TN/test5.png  

Filename: userImages/username2/TN/subfolder  

Filename: userImages/username2/TN/test2.jpg  

Filename: userImages/username2/TN/test4.gif  

Filename: userImages/username3/TN/styles.css

Мы можем указать более конкретно и включить расширение фала в шаблон glob():

foreach(glob('userImages/*/TN/*.jpg') as $image)  

{  

    echo "Filename: " . $image . "<br />";  

}

Теперь результатом будут jpg файлы:

Filename: userImages/username1/TN/test.jpg  

Filename: userImages/username1/TN/test3.jpg  

Filename: userImages/username2/TN/test2.jpg

Но что же делать, если вы хотите запросить jpg и gif, исключая все остальные файлы? Или вывести только имена папок? В этом случае нам поможет второй аргумент.

Второй аргумент glob() php

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

GLOB_MARK: Добавляет слеш к каждому возвращаемому каталогу.

GLOB_NOSORT: Возвращает файлы так, как они появляются в каталоге (без сортировки).

GLOB_NOCHECK: Возвращает шаблон поиска в случае отсутствия совпадений с шаблоном.

GLOB_NOESCAPE: Обратные слеши не экранируют метасимволы.

GLOB_BRACE: Расширяет {а, Ь, с} для совпадения с 'a', 'b', или 'c' (расширяет область поиска).

GLOB_ONLYDIR: Возвращение только записей папки, совпадающих с шаблоном.

GLOB_ERR: Остановка по ошибки чтения (например нечитаемые каталоги), по умолчанию ошибки игнорируются.

Как видите, наше требование может удовлетворить аргумент GLOB_BRACE:

foreach(glob('userImages/*/TN/{*.jpg,*.gif}', GLOB_BRACE) as $image)  

{  

    echo "Filename: " . $image . "<br />";  

} 
 

Этот пример вернет нам:

Filename: userImages/username1/TN/test.jpg  

Filename: userImages/username1/TN/test3.jpg  

Filename: userImages/username2/TN/test2.jpg  

Filename: userImages/username2/TN/test4.gif

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

foreach(glob('userImages/*/TN/*', GLOB_ONLYDIR) as $image)  

{  

    echo "Filename: " . $image . "<br />";  

} 

Выведет:

Filename: userImages/username2/TN/subfolder

Еще пример использования glob в PHP

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

foreach(glob('includes/plugins/*.php') as $plugin)  

{  

    include_once($plugin);  

}

Вот и все! Надеюсь, вам понравилось. Дайте знать, если есть какие-то вопросы по поводу php glob!



Дальше: Увеличение скорости сайта используя CSS Sprites


Дискуссия по теме     1 Комментарий 
Добавить комментарий
SunHere 13.02.2012 в 14:58
отлично, как раз искал как вывести именно список папок в папке)
Просмотров: 18809
Страхование КАСКО
карта банка
ндфл
усн
Оформление доверенности
страхование ипотеки
esim
осаго
ВЗР страхование
кредитная карта
Cialis barato Viagra Contrareembolso Cialis 5 mg precio mejores farmacias para comprar Viagra reacciones adversas de Cialis Reduslim cómo tomar soluciones para la impotencia Sildenafil Comprare Cialis 5 mg Giornaliero online in Italia Effetti indesiderati del Cialis 5 mg Acquista Cialis 20mg Cialis originale in vendita In Svizzera si compra il Viagra senza ricetta Cialis 10mg online Acquista Viagra in farmacia Offerta Cialis 5mg Spedra Avanafil in vendita online Acquista Viagra in Svizzera senza prescrizione авиатор спрайб Consegna a domicilio di Cialis 5 mg Effetti collaterali di Cialis 5 mg Consegna a domicilio di Cialis 20mg Acquista Cialis originale generico in Svizzera Consegna a domicilio di Viagra senza ricetta in Svizzera Compra Cialis 10mg Consegna a domicilio di Viagra in farmacia online Sconto Cialis 5mg Comprar Reduslim por internet Comprare Spedra Avanafil senza ricetta online Dove comprare il Viagra in Svizzera Compra Cialis Comprar online Viagra Contrareembolso Dónde encontrar Cialis 5 mg al mejor precio Viagra sin receta Cialis 5 mg efectos secundarios graves Reduslim comprar en línea Disfuncion Erectil tadalafilo avanafil prezzo cialis 20 mg prezzo cialis effetti benefici cialis 10 mg Reduslim Kaufen pulse x coin price