пустой ли каталог??

unhappy

Guest
пустой ли каталог??

как узнать? в зависимости от состояния каталога должно быть сообщение "пустой каталог" или "не пустой". Помогите.
PHP:
<?
$thedir=opendir("allalbums");//каталог, который нужно проверить на пустоту =)
while(($readdir=readdir($thedir))!==false){
if($readdir=="." || $readdir==".."){ continue; }
$count=count($readdir);
if($count != "0"){echo "Не пустой каталог";}
else{echo "Пустой каталог";}
}
?>
 

neko

tеam neko
смысл кода не понял.

пустоту можно проверить предельно просто

PHP:
    if ( count( scandir( "dirname" ) ) > 2 ) echo 'непустой';
т.к. "." и ".." есть всегда
 

Bermuda

Новичок
Автор оригинала: neko
пустоту можно проверить предельно просто

PHP:
    if ( count( scandir( "dirname" ) ) > 2 ) echo 'непустой';
Неверно, в каталоге могут быть каталоги и файлы с именем состоящим из одного или двух символов. Следуя твоему коду такие каталоги будут пустыми.
 

neko

tеam neko
Bermuda

глаза разуй
и прочти ман по обоим используемым функциям
 

Bermuda

Новичок
neko
Ок. А на винде? А в корне тоже?
Просто сейчас негде проверить.
 

Dallas

Guest
PHP:
<?php
if ($handle = opendir('/path/to/files')) {
    $count = 0;
    echo "Directory handle: $handle\n";
    while (false !== ($file = readdir($handle))) {$count++;}
    if ($count > 2) echo "Directory is not empty";
    else echo "Directory is empty";
    closedir($handle); 
}
?>
 

neko

tеam neko
бах, я к нему уже привыкать начинаю...

ок, для 4-тых версий
PHP:
	$d = opendir( 'dirname' );
	$c = 0;
	
	while( readdir( $d ) !== FALSE ) $c++;
	if ( $c > 2 ) echo 'непустая';
	
	closedir( $d );
-~{}~ 25.06.04 02:14:

а вот вопрос, почему так погано на первый строчке кода сьедается таб
 

Winer

Мимо проходил
а если проверку засунуть внутрь while и при этом не нужно получать содержание каталога, будет работать быстрее.
 

neko

tеam neko
зато будет 3 проверки вместо одной :)

и вообще писать быстрые программы на php смысла нет
есть смысл писать простые
 

Winer

Мимо проходил
while(($filename=readdir($d))!==false)
{
if($filename!='.' && $filename!='..')
{
echo 'Не пустой';
break;
};
};

-~{}~ 25.06.04 02:21:

а чем это не простая ???
 

Winer

Мимо проходил
Dallas
а если подумать ???

-~{}~ 25.06.04 02:23:

neko
а если в папочке возможно ~1000 элементов ??? так все их и сканить ???конечно если не брать случай, когда нужно получить содержимое папки тоже.
 

neko

tеam neko
Winer

да и нет.
во первых файлы кэшируются еще при опердире. хочешь ты того или нет, но список уже подгружен. :)

во вторых в мою программу можно добавить else и обработать случай пустой.
в твою надо в этом случае добавлять флаг и потом его проверять, что код усложняет еще больше. :)
 

Winer

Мимо проходил
neko
во первых файлы кэшируются еще при опердире
ну если ты в этом на 100% уверен, то да, я этого не знаю, ничего сказать не могу
во вторых в мою программу можно добавить else и обработать случай пустой.
в твою надо в этом случае добавлять флаг и потом его проверять, что код усложняет еще больше.
не понял, я вообще различий между твоим и своим кодом не вижу, за исключением того что на мой вероятнее всего меньше итераций понадобится(обычно вроде бы первыми читаются . и .. ).

-~{}~ 25.06.04 02:35:

пойду посмотрю насколько шустро работает readdir...
 

neko

tеam neko
Originally posted by Winer
ну если ты в этом на 100% уверен, то да, я этого не знаю, ничего сказать не могу
в выне это точно так
про *nix ничего незнаю, но предпологаю что тоже самое

пойду посмотрю насколько шустро работает readdir...
да не занимайся ты ерундой :Р
пхп это не тот язык чтобы такого сорта оптимизацию делать :)
впрочем если хочеться...
 

Winer

Мимо проходил
посмотрел - 2833 элементов

Function Summary Profile (sorted by total execution time)
-----------------------------------------------------------------------------------
Total Time Taken Avg. Time Taken Number of Calls Function Name
-----------------------------------------------------------------------------------
0.2706086636 0.0000934422 2896 readdir
0.0712597370 0.0033933208 21 opendir
0.0018150806 0.0000864324 21 closedir

в среднем немного, а в сумме существенно выходит :)
как говорили в школе - ЧТД(во всяком случае под виндой)

-~{}~ 25.06.04 02:43:

ерундой - не ерундой, если не знаю, надо проверить, а то так и буду думать, как оно на самом деле.

-~{}~ 25.06.04 02:49:

собссно, а какого сорта оптимизацию тогда надо делать ??? :)
а то так на всё можно сказать - пхп, эт такой язык, где оптимизация не нужна и тут и там и здесь.
 
Сверху