2013-02-19 87 views
1

我需要获取给定url位置中的所有文件。在PHP中使用fopen()方法

示例:考虑这个URL - http://www.test.com/test/ 我有三个文件(file1.txt,file2.csv,file3.xls)在给定url的测试文件夹内。我如何使用PHP中的fopen()方法读取文件名?

+0

您不能像从文件系统文件夹中那样列出URL中的文件。你将不得不解析Web服务器显示的目录索引(如果有的话);它将采用HTML格式,尽管 – 2013-02-19 13:51:51

+0

您想要做什么的可能性取决于提供URL的HTTP服务器是否配置为返回目录索引。 – 2013-02-19 13:52:08

回答

0

这取决于处理您的URL的HTTP服务器返回目录索引的能力。即使能够返回索引,索引的格式也不是标准化的。如果您知道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 2013-02-19 14:08:07

+0

@ h2ooooooo当然,但自动生成的目录索引通常不包含很多不相关的链接。如果是这样,你需要以某种方式过滤它们。这又取决于未标准化的特定服务器的目录索引的格式。 – 2013-02-19 14:10:11

+0

嗨米哈伊尔...谢谢你的回复。我从你的代码片段中得到了很好的结果。以下是我收到的输出。数组([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(copy).txt [7] = > Attendance.csv) 其实我有三个文件在数据文件夹内。这三个文件可以从上面的数组中的元素5,6和7中看到。但我想知道为什么这个数组有一些额外的元素(0,1,2,3和4)。你能解释一下这个原因吗? – 2013-02-19 16:34:56

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

感谢您的回复。但是你的方法对我不起作用。这我在本地主机测试。 – 2013-02-20 03:44:06

+0

你还试过使用相对路径吗?例如:'$ dir =“/ test /”;'具有以下相同的代码?相对路径在我的本地主机上工作 – Matt 2013-02-20 08:39:34