Список всех файлов директории

Ноябрь

Новичок
Список всех файлов директории

Есть ли способы получить список всех файлов директории,не используя базу данных..?
 
хммм.
ты уверен, что правильно понимаешь, для чего служит база данных? =)
а способ есть.
особенно, если думать не о базе данных, а о файловых функциях =)
 
[m]readdir[/m]

Но вы, в свою очередь, расскажите, как получить список файлов, используя базу данных
 
под базой данных я имел ввиду список файлов (например в тектовом документе..)
т.е "получить" никак неполучится, но заведомо можно записать все файлы:)
 
Да, гораздо интереснее был бы вопрос "Есть ли способы получить список всех файлов директории, используя базу данных..?"
Ноябрь
под базой данных я имел ввиду список файлов (например в тектовом документе..)
т.е "получить" никак неполучится, но заведомо можно записать все файлы
Чем этот способ отличается от генерирования списка файлов в директории случайным образом?
 
`ls -r` или `dir /S` а дальше регекспом и/или задавай дополнительные опции вывода
 
Не знаю насчет баз данных...
Вычисляет размеры (в частности) для заданной и всех вложенных (можно с маской)
Проверено.
<?php
class MY_DIR{
var $dir_size;
function MY_DIR($d){
$this->dir_size=0;
printf("<hr><b><u>DirName: %s </u></b><br>\n",realpath($d));
$s=$this->scan($d);
printf("<u>DirSize: %s</u><hr>\n",$this->dir_size);
echo $s;
}
//--
function scan($dirname){
GLOBAL $OBS;
$out_str='';
$dp=opendir($dirname);
while($file=readdir($dp)){//
//--Если директория--
if(is_dir($file)&&!eregi("\.",$file)){
$OBS[$file]=new MY_DIR($file);
}
elseif(!eregi("\.(txt)$",$file)){continue;}
else{
$fs=@filesize($file);
if(!is_numeric($fs)){$fs='<b><u>undefined</u></b>';}
else{$this->dir_size+=$fs;}
$out_str.=sprintf("FileName: %s; FileSize: %s<br>\n",$file,$fs);
}
}//End_while
return $out_str;
}//End_func
//--
}//End_class
//--Собственно, обработка начинается здесь----------------
$total_size=0;
$OBS=array();//Массив объектов-директорий
$dir_name='.';//Директория, с которой начинаем
$OBS[$dir_name]=new MY_DIR($dir_name);
foreach($OBS AS $ob){
$total_size+=$ob->dir_size;
}
printf("_______<u>TotalSize: %s</u>_______<hr>\n",$total_size);
?>
Результат:
<hr><b><u>DirName: y:\home\test.ru\www </u></b><br>
<hr><b><u>DirName: y:\home\test.ru\www\bg51x121 </u></b><br>
<u>DirSize: 0</u><hr>
<hr><b><u>DirName: y:\home\test.ru\www\cgi-bin </u></b><br>
<u>DirSize: 178</u><hr>
FileName: a.txt; FileSize: 113<br>
FileName: b.txt; FileSize: 65<br>
FileName: c.txt; FileSize: 0<br>
<hr><b><u>DirName: y:\home\test.ru\www\img </u></b><br>
<u>DirSize: 0</u><hr>
<u>DirSize: 178</u><hr>
FileName: a.txt; FileSize: 113<br>
FileName: b.txt; FileSize: 65<br>
FileName: c.txt; FileSize: 0<br>
_______<u>TotalSize: 356</u>_______<hr>
 
а что конкретно не сложилось? (кстати, есть ещё http://ru2.php.net/glob/ о которой мало кто знает)

с дир я бы сделал примерно так (пишу наскорую руку не тестируя)
PHP:
function readDir($path='./'){
$d = dir($path);
while (false !== ($entry = $d->read())) {
  if($entry == '.' or $entry == '..'){
    continue;
  }

  if(is_dir($path.$entry){
    readDir($path.$entry);
  }

  echo $path . $entry."<br />\n";
}
$d->close();
}

readDir();
 
После исправления явных синтаксических ошибок имеем;
В папке кроме скрипта три пустые вложенные :subdir1, в ней subdir2 и в ней subdir3
И еще времянки сует DREAMWEAVER
PHP:
<?php
function my_readDir($path='./'){ 
$d = dir($path); 
while (false !== ($entry = $d->read())) { 
  if($entry == '.' or $entry == '..')continue;
		if(is_dir($path.$entry)){ 
  		my_readDir($path.$entry); 
		} 
echo $path.$entry."<br />\n"; 
} 
$d->close(); 
} 
my_readDir();
?>
Результат
./subdir1subdir2
./subdir1
./TMP3pbqoy6abj.php
./TMP3pxeyy6acb.php
./untitled.php
 
ах ну что вы сразу -- цепляетесь к тому что я люблю визуально более читабельный код, а «косую» после $path.$entry в вызов функции добавить не догадались ;)
 
Да я не цепляюсь, просто сам тоже на скорую руку тестировал, особенно не вникал. А директорию одну ведь проглотил бесследно... А вообще, интересно было бы обойтись без массива объектов.
 
ну это объект нативный, а потому и работать будет быстрее построчного чтения файлов ;) (проглотил опять же из-за отсутствия косой, потому что условие на тестирования дириктории не срабатывает тогда)
 
Так, все, сажусь капитально...
PHP:
<?php 
	function my_readDir($path='./'){  
$d=dir($path);  
while(false!==($entry=$d->read())){
  if(($entry== '.')||($entry=='..'))continue; 
        if(is_dir($path.'/'.$entry)){//Вот это мне нравится, остроумно, сам не додумался
        my_readDir($path.'/'.$entry);
        }  
echo $path.'/'.$entry."<br />\n";  
}  
$d->close();  
}//End_func
my_readDir(); 
?>
Блестяще! лучшая реализация из всего, что я видел
 
Сверху