Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   помогите написать функцию более профессионально и менее ресурсоемко и короче (http://forum.oszone.net/showthread.php?t=45943)

E-mail 26-02-2005 23:52 301862

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

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 301871

E-mail
ну... а что сильно эта функция ресурсы есть???

E-mail 27-02-2005 00:28 301876

по сравнению с чем?;)

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

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 301877

E-mail
1) ты чтонибуть слышал о правилах кодирования?
2) есть специальный тег [ PHP ] для таких целей!

E-mail 27-02-2005 01:09 301887

1) всегда пользовался notepad-ом на крайняк wordpad.
только какое отношение это имеет к теме месажа?
2) слышал о таком теге как [ OFF ] ?

Prisoner 28-02-2005 09:58 302175

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

E-mail 28-02-2005 19:41 302305

Prisoner, а как тогда произвести сравнение?

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

спасибо :)

Vlad Drakula 28-02-2005 21:02 302329

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

E-mail 28-02-2005 21:36 302333

Vlad Drakula что посмотреть?

Vlad Drakula 28-02-2005 22:31 302339

E-mail все... пошол флуд... илбо прекрашаем либо я закрываю тему!!!

vadimiron 01-03-2005 02:33 302379

Я могу предложить небольшие косметические поправки и одну серьёзную поправку
Начну с серьёзной:
Эта поправка касается способа прохода по дериктории - в мануале стоит:
PHP код:

Обратите внимание на способ, которым 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);
}
?>

соответственно, данный момент надо подправить


И ещё моё личное замечание:
Касается вот этой строчки
PHP код:

if(filetype($b)!=dir

Если надо отфильтровывать директории, то намного легче будет так написать
PHP код:

if(!is_dir($b)) 

filetype как мне кажется, более ресурсоёмкая, так как она больше вариантов проверки в себя включает, а is_dir отвечает всего лишь на один вопрос:папка или не папка. Там где счёт файлов ведётся на десятки тысяч это может сыграть свою роль
Будут ещё идеи, напишу

E-mail 02-03-2005 00:44 302743

поправляем и получаем:

PHP код:

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>"

спасибо!
я вот думаю а как бы полутше вот это написать, и по короче
PHP код:

foreach(view_dir('./') as $a
foreach(
$a as $page


E-mail 17-04-2005 04:26 316435

vadimiron
is_dir возвращает false только если директории не существует, придется использовать как и использовал filetype

Prisoner 18-04-2005 13:34 316792

А еще она возвращает false когда применена к файлу.


Время: 12:16.

Время: 12:16.
© OSzone.net 2001-