2013-02-19 22 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