Показать полную графическую версию : помогите написать функцию более профессионально и менее ресурсоемко и короче
function view_dir($dir)
{
$a=opendir($dir);
while($b=readdir($a))
{
if(filetype($b)!=dir)
{
$r[filetype($b)][]=$b;
}
}
closedir($a);
return $r;
}
$mass=view_dir('./');
foreach($mass[file] as $a)
{
echo $a."<br>";
}
Vlad Drakula
27-02-2005, 00:13
E-mail
ну... а что сильно эта функция ресурсы есть???
по сравнению с чем?;)
вот что у меня вышло если более лутше написать:
function view_dir($dir)
{
$a=opendir($dir);
while($b=readdir($a))
if(filetype($b)!=dir)
$r[filetype($b)][]=$b;
closedir($a);
return $r;
}
foreach(view_dir('./') as $a)
foreach($a as $page)
echo $page."<br>";
Ваши идеи?
Vlad Drakula
27-02-2005, 00:36
E-mail
1) ты чтонибуть слышал о правилах кодирования?
2) есть специальный тег [ PHP ] для таких целей!
1) всегда пользовался notepad-ом на крайняк wordpad.
только какое отношение это имеет к теме месажа?
2) слышал о таком теге как [ OFF ] ?
Prisoner
28-02-2005, 09:58
E-mail, это не тот случай когда необходимо обсуждение на форуме (мое личное мнение, необъективное). Функция не ресурсоемкая, а иначе реализовать чтение содержимого каталога без извратов (из мысли: "а вдруг там 10000 файлов?" :)), имхо, нельзя. Можно поглядеть в сторону псевдокласса dir.
P.S. функция filetype возвращает строку кажется, а у вас сравнение с константой, при некоторых настройках php это даст нотайс о неозначенной константе который испортит страничку своим видом.
Prisoner, а как тогда произвести сравнение?
насчет того что ресурсоемкая или нет:
1) в директории действительно 13571 файл
2) всетаки по моему скромному мнению, объективному, как мне кажется :) такие форумы должны содержать не только банальный фак, но и обмен опытом и професиональными трюками. и это должно быть полезно всем.
спасибо :)
Vlad Drakula
28-02-2005, 21:02
E-mail
1) ну и что... я без проблем перебирал такие количества файлов всего за пару секунд...
2) посмотри теся созданные мною... там действительно встречаются не тревиальные вопросы и обмен опытом...
Vlad Drakula что посмотреть?
Vlad Drakula
28-02-2005, 22:31
E-mail все... пошол флуд... илбо прекрашаем либо я закрываю тему!!!
vadimiron
01-03-2005, 02:33
Я могу предложить небольшие косметические поправки и одну серьёзную поправку
Начну с серьёзной:
Эта поправка касается способа прохода по дериктории - в мануале стоит:
Обратите внимание на способ, которым return -значение функции
readdir() проверяется в следующем примере. Мы явным образом
проверяем, идентично ли return-значение (равно и того же типа, что и
-- см. Операции сравнения) FALSE, поскольку иначе любое вхождение
директории, имя которого вычисляется в FALSE, остановит цикл.
Пример 1. Список всех файлов в директории
// Обратите внимание, что !== не существовала до 4.0.0-RC2
<?php
if ($handle = opendir('/path/to/files')) {
echo "Directory handle: $handle\n";
echo "Files:\n";
/* Это корректный способ цикла по директории. */
while (false !== ($file = readdir($handle))) {
echo "$file\n";
}
/* Это НЕПРАВИЛЬНЫЙ способ цикла по директории. */
while ($file = readdir($handle)) {
echo "$file\n";
}
closedir($handle);
}
?>
соответственно, данный момент надо подправить
И ещё моё личное замечание:
Касается вот этой строчки
if(filetype($b)!=dir)
Если надо отфильтровывать директории, то намного легче будет так написать
if(!is_dir($b))
filetype как мне кажется, более ресурсоёмкая, так как она больше вариантов проверки в себя включает, а is_dir отвечает всего лишь на один вопрос:папка или не папка. Там где счёт файлов ведётся на десятки тысяч это может сыграть свою роль
Будут ещё идеи, напишу
поправляем и получаем:
function view_dir($dir)
{
$a=opendir($dir);
while(false!==($b=readdir($a)))
if(!is_dir($b))
$r[dir][]=$b;
closedir($a);
return $r;
}
foreach(view_dir('./') as $a)
foreach($a as $page)
echo $page."<br>";
спасибо!
я вот думаю а как бы полутше вот это написать, и по короче
foreach(view_dir('./') as $a)
foreach($a as $page)
vadimiron
is_dir возвращает false только если директории не существует, придется использовать как и использовал filetype
Prisoner
18-04-2005, 13:34
А еще она возвращает false когда применена к файлу.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.