|
|
|
|
|
для: denvor
(11.02.2005 в 17:07)
| | Отвечаю сам себе :):
Явно определяя переменную $arr как массив, мы обнуляем ее каждый раз при рекурсивном обращении. Убираем строчку $arr = array (); - все работает.
Всем большое спасибо! | |
|
|
|
|
|
|
|
для: cheops
(10.02.2005 в 22:46)
| | я так и подумал :)
Теперь ошибки нет, но по -прежнему выводит только файлы текущей директории.
Причем, для проверки я оставил вывод на экран - все нормально работает. Проблема , похоже, в рекурсии - там то ли не идет запись в массив, то ли он затирается внешним циклом, когда регистрируются файлы текущей директории. Что тут можно придумать? | |
|
|
|
|
|
|
|
для: denvor
(10.02.2005 в 14:19)
| | Хм... дело в том, что здесь происходит рекурсивный вызов и если изменяется число параметров в исходной функции - нужно изменить число и в вызове (я гляжу это забы сделать :), поэтому исправьте пожалуйста строку
<?php
scan_dir($dirname."/".$file,$fd,$fb);
?>
|
на
<?php
scan_dir($dirname."/".$file);
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(10.02.2005 в 09:49)
| | Да, действительно работает. Теперь я после последней фигурной скобки вставляю
foreach($arr as $val)
{
echo("$val");
}
|
Выводит только файлы (без директорий) в текущей директории и ошибку:
Undefined variable: fb in w:\home\127.0.0.1\www\list2.php on line 27
Вот. | |
|
|
|
|
|
|
|
для: denvor
(10.02.2005 в 00:44)
| | Хм... а уменя такой вариант всё выводит... какая версия PHP? | |
|
|
|
|
|
|
|
для: cheops
(08.02.2005 в 22:56)
| | Доброго времени суток, cheops и All!
Вот код:
как сделать правильно и в чем проблема -не знаю. Если ставлю echo $arr[2]; перед последней фигурной скобкой - выводит значение, а после функции - нет :(
<?php
scan_dir(".");
function scan_dir($dirname)
{
GLOBAL $arr;
$arr = array();
// Открываем текущую директорию
$dir = opendir($dirname);
// Читаем в цикле директорию
while (($file = readdir($dir)) !== false)
{
// Если файл обрабатываем его содержимое
if($file != "." && $file != "..")
{
// Если имеем дело с файлом - регистрируем его
if(is_file($dirname."/".$file))
{
$arr[] = $dirname."/".$file." - ".date("m.d.y",filemtime($dirname."/".$file))." - ".filesize($dirname."/".$file)."<br>";
}
// Если перед нами директория, вызываем рекурсивно
// функцию scan_dir
if(is_dir($dirname."/".$file))
{
$arr[] = $dirname."/".$file."<br>";
scan_dir($dirname."/".$file,$fd,$fb);
}
}
}
// Закрываем директорию
closedir($dir);
}
// посмотрим третий элемент массива, к примеру...
echo ($arr[2]);
?>
|
| |
|
|
|
|
|
|
|
для: denvor
(08.02.2005 в 21:10)
| | Хм... не должно бы быть так, приведите пожалуйста конечный код... может я чего свежим взглядом замечу... | |
|
|
|
|
|
|
|
для: cheops
(08.02.2005 в 00:31)
| | 2 cheops: с кодом isset все получилось - прогнал массив, прикручивая к файлам время и дату и запихивая обратно в массив. Но! Все равно нужно делать рекурсивный обход дерева - так что ваш код для моих целей больше подходит. Я попробовал в ваш код вставить вместо вывода листинга на экран вывод его в массив, с тем, чтобы за пределами функции дальше работать с эти массивом, но ниего не вышло - за пределы функции массив не передается даже при объявлении GLOBAL (global ... я вставил сразу после первой фигурной скобки). | |
|
|
|
|
|
|
|
для: denvor
(08.02.2005 в 00:24)
| | Для определения размера файла предназначена функция filesize(), принимающая в качестве единственного параметра путь к файлу и возвращает размер файла в байтах. http://www.softtime.ru/dic/id_dic=184&id_group=6
Для определения даты последнего изменения файла, предназначена функция filectime() http://www.softtime.ru/dic/id_dic=178&id_group=6 | |
|
|
|
|
|
|
|
для: isset
(07.02.2005 в 23:26)
| | Здорово!
А как прикрутить туда вывод размера и даты изменения файла? В справочнике на сайте я не нашел эту функцию :( | |
|
|
|
|