您的位置:

使用PHP readdir函数读取目录列表

一、介绍readdir函数

PHP readdir函数用于读取打开目录句柄所指的目录,将目录中的文件和子目录读取到数组中。Readdir函数可以方便地列出整个网站根目录下的所有文件和文件夹,从而达到灵活的文件处理目的。

二、readdir函数使用示例

<?php
//打开目录句柄
$dir_handle = opendir('/var/www/html/');
//输出目录中的所有文件名
while (($filename = readdir($dir_handle)) !== false) {
    echo $filename . "
"; } //关闭目录句柄 closedir($dir_handle); ?>

以上代码会输出/var/www/html/目录中的所有文件名

三、readdir函数常用应用场景

1. 读取目录下的所有文件

只需要将readdir函数的返回值放入一个循环中即可输出整个目录下的所有文件名。

<?php
//打开目录句柄
$dir_handle = opendir('/var/www/html/');
//输出目录中的所有文件名
while (($filename = readdir($dir_handle)) !== false) {
    if ($filename != "." && $filename != "..") {
        echo $filename . "
"; } } //关闭目录句柄 closedir($dir_handle); ?>

以上代码会输出/var/www/html/目录中的所有文件名,并且不会输出"."和".."。

2. 读取目录下指定类型的文件

如果只需要读取某个类型文件,可以通过正则表达式对文件名进行筛选。

<?php
//打开目录句柄
$dir_handle = opendir('/var/www/html/');
//输出目录中的所有指定类型文件名
while (($filename = readdir($dir_handle)) !== false) {
    if (preg_match("/\.txt$/i", $filename)) {
        echo $filename . "
"; } } //关闭目录句柄 closedir($dir_handle); ?>

以上代码会输出/var/www/html/目录中的所有txt文件名。

3. 读取目录下的所有子目录

只需要判断文件类型是否为目录即可。

<?php
//打开目录句柄
$dir_handle = opendir('/var/www/html/');
//输出目录中的所有子目录
while (($filename = readdir($dir_handle)) !== false) {
    if (is_dir("/var/www/html/" . $filename)) {
        echo $filename . "
"; } } //关闭目录句柄 closedir($dir_handle); ?>

以上代码会输出/var/www/html/目录中的所有子目录名。

4. 递归读取目录下的所有文件和子目录

递归读取目录下的所有文件和子目录需要使用到一个自定义函数,如下所示。

<?php
function read_all_dir($dir) {
    if (!is_dir($dir)) {
        return false;
    }
    $handle = opendir($dir);
    while (($filename = readdir($handle)) !== false) {
        if ($filename == "." || $filename == "..") {
            continue;
        }
        if (is_dir($dir . "/" . $filename)) {
            echo "" . $filename . "
"; read_all_dir($dir . "/" . $filename . "/"); } else { echo $filename . "
"; } } closedir($handle); } read_all_dir("/var/www/html/"); ?>

以上代码会输出/var/www/html/目录下所有文件和子目录的名称,并且目录名会被加粗显示。

四、总结

PHP的readdir函数可以方便地读取目录下的所有文件和子目录,可以用于文件处理、文件上传、文件管理等各种场景。需要注意的是,读取整个目录的过程中可能会因为权限问题、文件大小等原因导致程序异常,需要根据实际情况进行调整。