2012-04-30 154 views
0

所以我要通過閱讀,並通過PHP文件在PHP中寫入文件,並有一個例子,我不明白:PHP讀取目錄

http://php.net/manual/en/function.readdir.php

如果向最終它顯示了一個例子像這樣:

<?php 
if ($handle = opendir('.')) { 
    while (false !== ($entry = readdir($handle))) { 
     if ($entry != "." && $entry != "..") { 
      echo "$entry\n"; 
     } 
    } 
    closedir($handle); 
} 
?> 

在什麼情況下會...曾經讀?

回答

3

readdir API調用遍歷所有目錄。因此,假設你循環當前目錄(用「.」表示),然後你進入一個無限循環。此外,避免迭代父目錄(由「..」表示)以將列表限制到當前目錄及其下方。

希望有所幫助。

+0

好的,所以通過說'readdir('。')'它會讀取所有內容 - 甚至它本身?所以我不會遇到這兩種情況,如果我宣佈一個目錄,如'readdir('test_directory')' –

+0

請參閱@ tomhallam的迴應。這就是它在Unix文件系統中的方式。看到這個例子。 – g13n

0

因爲在UNIX文件系統中,...就像路標一樣,據我所知。無論如何,肯定對這個PHP函數。

讓他們在那裏,你會得到一些奇怪的結果(如無限循環等),否則!

0

In * nix。是當前工作目錄,而..是父目錄。但是,任何文件或目錄都以'。'開頭。被認爲是隱藏的,所以我更喜歡像下面這樣:

... 
if ($entry[0] !== '.') { 
    echo "$entry\n"; 
} 
... 

這將確保你不解析「漲」目錄樹,你不要無休止地循環本目錄,任何隱藏的文件/文件夾被忽略。

+0

由於php是基於cpp的語言,因此可以使用$ entry [0]更快地獲取第一個字符, –

1

如果你想使用PHP讀取目錄,我會建議你使用scandir函數。下面是scandir的演示

$path = __DIR__.'/images'; 
$contents = scandir($path); 
foreach($contents as $current){ 
    if($current === '.' || $current === '..') continue ; 
    if(is_dir("$path/$current")){ 
    echo 'I am a directory'; 
    } elseif($path[0] == '.'){ 
    echo "I am a file with a name starting with dot"; 
    } else { 
    echo 'I am a file'; 
    } 
}