Войти

Показать полную графическую версию : помогите написать функцию более профессионально и менее ресурсоемко и короче


E-mail
26-02-2005, 23:52
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
ну... а что сильно эта функция ресурсы есть???

E-mail
27-02-2005, 00:28
по сравнению с чем?;)

вот что у меня вышло если более лутше написать:

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 ] для таких целей!

E-mail
27-02-2005, 01:09
1) всегда пользовался notepad-ом на крайняк wordpad.
только какое отношение это имеет к теме месажа?
2) слышал о таком теге как [ OFF ] ?

Prisoner
28-02-2005, 09:58
E-mail, это не тот случай когда необходимо обсуждение на форуме (мое личное мнение, необъективное). Функция не ресурсоемкая, а иначе реализовать чтение содержимого каталога без извратов (из мысли: "а вдруг там 10000 файлов?" :)), имхо, нельзя. Можно поглядеть в сторону псевдокласса dir.
P.S. функция filetype возвращает строку кажется, а у вас сравнение с константой, при некоторых настройках php это даст нотайс о неозначенной константе который испортит страничку своим видом.

E-mail
28-02-2005, 19:41
Prisoner, а как тогда произвести сравнение?

насчет того что ресурсоемкая или нет:
1) в директории действительно 13571 файл
2) всетаки по моему скромному мнению, объективному, как мне кажется :) такие форумы должны содержать не только банальный фак, но и обмен опытом и професиональными трюками. и это должно быть полезно всем.

спасибо :)

Vlad Drakula
28-02-2005, 21:02
E-mail
1) ну и что... я без проблем перебирал такие количества файлов всего за пару секунд...
2) посмотри теся созданные мною... там действительно встречаются не тревиальные вопросы и обмен опытом...

E-mail
28-02-2005, 21:36
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 отвечает всего лишь на один вопрос:папка или не папка. Там где счёт файлов ведётся на десятки тысяч это может сыграть свою роль
Будут ещё идеи, напишу

E-mail
02-03-2005, 00:44
поправляем и получаем:


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)

E-mail
17-04-2005, 04:26
vadimiron
is_dir возвращает false только если директории не существует, придется использовать как и использовал filetype

Prisoner
18-04-2005, 13:34
А еще она возвращает false когда применена к файлу.




© OSzone.net 2001-2012