Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > список файлов в каталоге


Автор: mayso 23.8.2005, 07:53
подскажите пожалуйста, как можно получить массив, элементами которого будут названия файлов в какой либо папке не сервере где лежит скрипт.
зарание спасибо

Автор: Artiom 23.8.2005, 08:36
Попробуй функцию glob("*.*")
http://www.php.net/manual/ru/function.glob.php

Автор: -=Ustas=- 23.8.2005, 08:59
http://forum.vingrad.ru/index.php?showtopic=59005&hl= описан твой случай.

Автор: mayso 23.8.2005, 13:31
для Artiom
http://www.php.net/manual/ru/function.glob.php пугает вот что:
Цитата
Замечание: Эта функция не применима для работы с удаленными файлами, поскольку файл должен быть доступен через файловую систему сервера.


для -=Ustas=-
http://forum.vingrad.ru/index.php?showtopic=59005&hl= пока ни чего понять не могу.
например что делает эта штука
Код

if(@!$action)

и что делает эта штука
Код

$readdir->close();

и где там указывается директория с файлами.

ЗЫ самый оперативный форум

Автор: Mal Hack 23.8.2005, 13:44
1. Список файлов ты получаешь либо через glob, либо через scandir (PHP5)
2. Читаешь директорию opendir, readdir, is_file

Листинг файлов на удаленном HTTP сервере ты не прочитаешь.

Автор: -=Ustas=- 23.8.2005, 14:23
Цитата(mayso @ 23.8.2005, 13:31)
для -=Ustas=-
http://forum.vingrad.ru/index.php?showtopic=59005&hl= пока ни чего понять не могу.
например что делает эта штука
Код

if(@!$action)

и что делает эта штука
Код

$readdir->close();

и где там указывается директория с файлами.

Ну ты бы хоть посмотрел на саму форму ввода, или бы сначала скопировал код и посмотрел живьем. $action - это имя переменная, которая передается из формы, из поля с именем action (лучше конечно ее привести к виду $_POST['action']), и если она не установлена, то выводится форма для вводи имени директории.
$readdir->close() - это типа объект от класса dir (Псевдо-объектно-ориентированный механизм для чтения директории), который имеет три метода - read, rewind и close. Про него можешь в мане почитать.

Автор: Artiom 24.8.2005, 08:48
Цитата(mayso @ 23.8.2005, 12:31)
здесь пугает вот что:

Цитата 
Замечание: Эта функция не применима для работы с удаленными файлами, поскольку файл должен быть доступен через файловую систему сервера.

так тебе же надо получить список файлов на сервере, где ты запускаешь скрипт. Все путем.

Автор: mayso 24.8.2005, 08:55
затупил smile

Автор: Рыжий 24.8.2005, 10:15
Вот функция распечатывает имена всех подкаталогов в текущем каталоге:
Код

<?
// Функция распечатывает имена всех подкаталогов в текущем каталоге,
// выполняя рекурсивный обход. Параметр $level задает текущую
// глубину рекурсии.
function PrintTree($level=1)
{
// Открываем каталог и выходим в случае ошибки
$d=@opendir(".");
if(!$d) return;
while(($e=readdir($d))!==false) {
// Игнорируем элементы .. и .
if($e=='.'||$e=='..') continue;
// Нам нужны только подкаталоги
if(!@is_dir($e)) continue;
// Печатаем пробелы, чтобы сместить вывод
for($i=0; $i<$level; $i++) echo ".";
// Выводим текущий элемент
echo "$e\n";
// Входим в текущий подкаталог и печатаем его
if(!chdir($e)) continue;
PrintTree($level+1);
// Возвращаемся назад
chdir("..");
// Отправляем данные в браузер, чтобы избежать видимости зависания
// для больших распечаток
flush();
}
closedir($d);
}
// Выводим остальной текст фиксированным шрифтом
echo "<pre>";
echo "/\n";
// Входим в корневой каталог и печатаем его
chdir("/");
PrintTree();
echo "</pre>";
?>

Добавлено @ 10:16
работает очень медленно © Котеров

Автор: mayso 25.8.2005, 14:54
я попробовал сделать по методу -=Ustas=-а
Код

<?php
$file_names = array();
$file_count = "0";
$readdir = dir("/data");
while ($files = $readdir->read()){
       if($files  != "." AND $files  != ".."){
          $file_names[$file_count] = $files; $file_count++;}}
$readdir->close();
sort($file_names);
for($count = 0; $count < $file_count; $count++){
    $file_link = $file_names[$count];
?>
<html>
<head>
<title></title>
</head>
<body>
<table>
<tr>
<td bgcolor="#F2F2F2"><font face="Arial" style="font-size: 9px;"><? echo $count; ?></font></td>
<td bgcolor="#D9D9D9"><font face="Arial" style="font-size: 9px;"><? echo $file_link; ?></font></td>
</tr>
</table>
<? } ?>
</body>
</html>

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

Автор: -=Ustas=- 25.8.2005, 16:40
Всё ништяк работает! Я даже не поленился проверить! smile Диру правильно указывай!

Автор: mayso 26.8.2005, 01:12
точно неправильно указал.
всем огромное спасибо. у меня все заработало.
сейчас буду разбираться с
Цитата
(Псевдо-объектно-ориентированный механизм для чтения директории)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)