.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";
}
?>
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 [ ссылка ]