2013-02-19 3 views
1

Мне нужно получить все файлы в заданном месте URL.Использование метода fopen() в PHP

Пример: рассмотрим этот url - http://www.test.com/test/ У меня есть три файла (file1.txt, file2.csv, file3.xls) внутри тестовой папки на указанном URL-адресе. Как читать имена файлов с помощью метода fopen() в PHP?

+0

Вы не можете перечислить файлы из URL-адреса, как из папки файловой системы. Вам нужно будет проанализировать индекс каталога, который показывает веб-сервер (если таковой имеется); это будет в формате HTML, но –

+0

Возможность делать то, что вы хотите, зависит от того, настроен ли HTTP-сервер, обслуживающий URL, для возврата индексов каталога. –

ответ

0

Это зависит от способности HTTP-сервера, который обрабатывает ваш URL, возвращать индексы каталогов. Даже когда он способен возвращать индексы, формат такого индекса не стандартизирован. Если вы знаете, что HTTP-сервер возвращает индексы каталогов и вы знаете формат, вы можете получить список файлов, как это:

$index = fopen ('http://ftp.gnu.org/', 'r'); 
$data = ""; 
while ($d = fread ($index, 65536)) 
    $data = $data . $d; 

$matches = array(); 
preg_match_all ('/href="([^"]+)"/', $data, $matches); 

print_r ($matches [1]); 
+0

Разве это не может быть похоже на 'href' на странице? (а также ссылки сверху) – h2ooooooo

+0

@ h2ooooooo Конечно, но автоматически созданный индекс каталога обычно не содержит много несвязанных ссылок. Если это так, вам нужно как-то отфильтровать их. Это, опять же, зависит от формата индекса каталога для конкретного сервера, который не стандартизирован. –

+0

Привет, Михаил ... Спасибо за ваш ответ. И я получил хороший результат от вашего фрагмента кода. Ниже приводится результат, который я получил. Array ([0] => C = N; O = D [1] => C = M; O = A [2] => C = S; O = A [3] => C = D; O = A [4] =>/test1/test2/data/[5] => Посещаемость% 20 ​​(другой% 20copy) .txt [6] => Посещаемость% 20 ​​(копия) .txt [7] = > Attendance.csv) На самом деле у меня есть три файла внутри папки данных. Эти три файла, которые я могу видеть из элементов 5, 6 и 7 в приведенном выше массиве. Но мне интересно, почему этот массив имеет некоторые дополнительные элементы (0,1,2,3 и 4). Не могли бы вы объяснить причину этого? –

0

Если все, что вы хотите список файлов в определенной директории, то вместо fopen() попробуйте scandir:

$dir = "http://www.test.com/test/" 

$files = scandir($dir); 

print_r($files); 

Если разрешения сервера хоста позволяют, вы должны получить результат:

Array(
[0] => ., 
[1] => .., 
[2] => file1.txt, 
[3] => file2.csv, 
[4] => file3.xsl 
) 

Тогда вы всегда цикла через массив, чтобы сделать результат <ul>, или как бы вы хотели, чтобы содержимое отображалось.

+0

Спасибо за ваш ответ Matt. Но ваш метод не работал для меня. Это я тестировал в localhost. –

+0

Вы также пробовали использовать относительный путь? Например: '$ dir ="/test/";' с тем же следующим кодом? Относительный путь работает на моем локальном хосте – Matt

Смежные вопросы