今天看到这样一到面试题:
然后我尝试了这个函数,发现一个问题,这个函数只能读取给定目录下的所有文件和目录,不能获取给定目录下所有的文件名(就是子目录下的文件名)。
通过查手册发现这个函数,在网上有些错误的理解,在这里纠正一下。
array scandir ( string $directory
[, int $sorting_order
[, resource $context
]] )
作用:列出指定路径中的文件和目录。
参数:①给定的目录;②排序顺序(默认按字母的升序排列)③比较复杂,参考手册为准。
返回值:成功返回一个array,失败返回FALSE。如果给定的不是目录,返回FALSE的同时,会给一条警告。
例子:
输出:
这里有趣的是在手册中,说明了这个函数在PHP4中的实现原理:
$dir = '/'; $open = opendir($dir); while (false !== ($file = readdir($open))){ $filename[] = $file; } echo "<pre>"; sort($filename); print_r($filename); rsort($filename); print_r($filename);
这里的输出和上面的格式一样。也就是scandir的原理。
这里所用到的函数:
resource opendir ( string $path
[, resource $context
] )
作用:打开目录句柄(用之前一般用is_dir判断目录是否存在)(一般后面跟closedir(),readdir() 和 rewinddir() 操作 )
参数:①目录;②详见手册。
返回值:成功返回打开后的资源。失败返回FALSE。如果参数不是目录则产生警告。
string readdir ([ resource $dir_handle
] )
作用:从目录句柄中读取条目
参数:①目录句柄的 resource,之前由 opendir() 打开
返回值:成功时返回文件名,失败时返回FALSE。
最后 sort和rsort函数我记得我在以前的随笔里提到过,是对数组的排序。需要注意的是这两个函数是引用传递,函数执行完后,数组的元素顺序会发生变化。