PDA

Просмотр полной версии : Листинг директорий : как приписыать скрипту постоянно меняющийся путь к файлу? и т.д.


UnPazz
07.12.2008, 14:30
Листинг директорий : ищет файлы и папки в определенной папке.
Не получается сделать, чтобы открывал найденные папки и искал в них файлы. <?php

$mas_dir[0] = '/'; // папка в которой искать.
$i=0; //счетчики равны нулю : кол-во найденных папок.
$td=0; //временная переменная для найденных папок.
$tf=0; //счетчики равны нулю : кол-во найденных файлов.


while (true == isset($mas_dir) ) //пока есть папки в папках, ищем.
{

//в директории
$mas_dir[$i] = opendir(''.$mas_dir[$i].''); // здесь указывается путь к вновь найденной папке.

$td=$i; //временная переменная

while (true == ($file = readdir($mas_dir[$i])))
{
if ($file != "." && $file != "..")
if (is_dir($file) == true ) { $td=$td+1; $mas_dir[$td]=$file; };
if (is_file($file) == true ) { $mas_file[$tf]=$file; $tf=$tf+1; };
};
closedir($mas_dir[$i]);

$i=$td; //временная переменная

//вывод на экран
for ($is=0; $is<count($mas_dir); $is++) echo "Dir $is $mas_dir[$is] <br>";
for ($is=0; $is<count($mas_file) ; $is++) echo "File $is $mas_file[$is] <br>";

//если ещё есть папки, то
if (true == isset($mas_dir[$i+1] ) )
{ array_shift($mas_dir); //удаляем первый элемент массива
$i=$i-1; //уменьшаем указатель на единицу
}
else break; если нет, то заканчиваем работу.

}

?> Если в папке найдены папки, то скрипт продолжает работу, копирую названия найденных папок в массив $mas_dir[] . Как только скрипт переберет все папкипройдет по всм папкам он закончит работу. Все найденные файлы, перемещаются в массив $mas_file[].

При нахождении новых папок, нужна указывать путь к папке (в выделенной строке. Но функция getcwd определяет путь, в котором работает скрипт.

Как определять путь к найденной папке, чтобы открыть её? И как прописывать постоянно меняющийся путь к вновь найденным папкам в папках (см. выделенную строку)?

[dei]
07.12.2008, 21:01
<?php
function ls($dir,$level=0) {
if(!$level) chdir($dir);
$dir=opendir('.');
while ($d = readdir($dir)) {
if($d=='.' || $d=='..') continue;
if(is_dir($d)) {
echo str_repeat("\t",$level).$d."\n";
chdir($d);
ls($d,$level+1);
chdir('..');
}
else if(is_file($d))
{
echo str_repeat("\t",$level).$d."\n";
}
}
}

echo '<pre>';
ls('.');
echo '</pre>';
?>