2012-04-30 69 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'; 
    } 
}