.note | Glob

Уверен, что многие PHP гуру даже и не подозревают, что есть такая приятная нативная функция как glob(). А ведь она просто гениальна, ибо вместо:


<?
$d = dir("/dir/");
while (false !== ($entry = $d->read())) {
    if (substr($entry, -3) == 'txt') {
        echo $entry .' size '. filesize($entry) ."\n";  
    }
}
$d->close();
?>

Можно написать просто вот это


<?
foreach (glob("/dir/*.txt") as $filename) {
   echo "$filename size " . filesize($filename) . "\n";
}
?>

Top

Слова: coding, php

Комментарии Отключены

klim

Да, только работает она исключительно по *nix (где есть glibc), а почти все PHP-программисты занимаются отладкой по windows.

19.10.2005 // 18:36 [ ссылка ]

klim

А, прошу прощения, под windows работает. Это я ее с fnmatch перепутал. Хотя у меня есть смутные воспоминания, что в старых php и glob не работала.

19.10.2005 // 18:46 [ ссылка ]

Ramm

klim, "в старых" это в 4.3.0? :)

19.10.2005 // 23:51 [ ссылка ]

klim

2 Ramm:

Ну да, 4.2.x, 4.3.x это старые т.к уже 5.0.x есть (и то что наши хостеры так тормозят это не повод).

20.10.2005 // 00:31 [ ссылка ]

Ответ от Автора

тормозат лишь потому, что толпа идиотов установило тонну скриптов, которые в принципе под 5ой не пашут )

20.10.2005 // 10:39 [ ссылка ]

Ilya Birman

Да, сам про неё не очень давно узнал. А всё потому, что называние у неё просто наидебильнейшее. Оно не отражает ничего :-)

2klim: вообще, то, что наши хостеры так тормозят, - это повод :)

20.10.2005 // 01:07 [ ссылка ]

Ответ от Автора

таких функций тонна )) может быть glob — это какое-то хитрое сокращение?

20.10.2005 // 10:44 [ ссылка ]

MiRacLe

В своё время писал на perl (в основном на *nix) откуда собственно узнал сначала об утилите glob , затем о функции glob в самом perl-е

Функция очень удобная, особенно в ситуациях требующих искать файлы не в одной папке (где dir всё же привычнее (хотя бы потому что первый пример который находиться на тему листинга директории именно с этой функцией) , а во множестве по заданной маске ex. $lang_vars = glob(/www/projects/*/public_html/*/lang.*.conf);

20.10.2005 // 11:20 [ ссылка ]

klim

2 Ilya Birman:

Ну, glob это стандартное unix'овое название. Там, как известно, с эти вообще очень весело. Один CREAT чего стоит. Правда, и другие тоже этим нрешат: например, Cloneable из Java.

20.10.2005 // 16:12 [ ссылка ]

amix

ну "creat" - это еще более или менее близко к смыслу, а почему "cat" - до сих пор не понимаю =)

"glob" - тоже то еще название..

вот оно, geek'овое прошлое ))

23.10.2005 // 20:03 [ ссылка ]

Lynn

Ну, у glob есть подводные камни. Тоже из *nix'ового прошлого. Например, она пропускает файлы начинающиеся с точки.

26.10.2005 // 21:52 [ ссылка ]

Ответ от Автора

это RFC — их не читает ни одна команда с маской "*", ибо — безопасность

26.10.2005 // 22:35 [ ссылка ]

Lynn

Опять же, в вашем примере, если в каталоге нет подходящих файлов, то foreach ругнётся.

26.10.2005 // 21:55 [ ссылка ]

Ответ от Автора

блин, ну разве тайпкаст это так сложно?

[...] foreach ((array)glob(«/dir/*.txt») as $filename) { [...]

26.10.2005 // 22:34 [ ссылка ]

Василий

Спасибо. Куда удобней явоподобных фильтров из PHP 5.

01.12.2005 // 02:37 [ ссылка ]