遍历文件夹里面的所有文件

855 ℃ 0 条
内容摘要本文给出 PHP 递归遍历文件夹内所有文件的完整函数实现,使用 opendir 与 readdir 逐层扫描目录结构,并通过 iconv 处理 GBK 与 UTF-8 之间的中文文件名编码转换,附带 mb_internal_encoding 字符集设置,避免中文路径出现乱码。
遍历文件夹里面的所有文件

遍历文件夹里面的所有文件

function scanDirectory($dir) {
    // 打开目录
    $handle = opendir($dir);
    
    // 循环读取目录中的文件或子文件夹
    while (false !== ($file = readdir($handle))) {
        if ($file != '.' && $file != '..') {
            $filePath = $dir . '/' . $file;
            
            // 将文件名转换为正确的字符编码
            $filePath = iconv('GBK', 'UTF-8', $filePath);
            
            // 检查文件是否是文件夹
            if (is_dir($filePath)) {
                // 递归调用自身,扫描子文件夹
                scanDirectory($filePath);
            } else {
                // 处理文件
                echo $filePath . "\n";
            }
        }
    }
    
    // 关闭目录句柄
    closedir($handle);
}

// 设置默认字符编码为UTF-8
mb_internal_encoding('UTF-8');

// 调用函数,并传入要扫描的目录路径
scanDirectory('path/to/directory');

在上面的代码中,我们使用了iconv函数将文件路径转换为正确的字符编码。在示例中,我将输入的文件路径从GBK编码转换为UTF-8编码。你可以根据实际情况进行调整。

另外,我还添加了mb\_internal\_encoding函数来设置默认字符编码为UTF-8,以确保PHP正确处理中文字符。这样,你就可以在处理文件路径和文件名时正确地处理中文字符。

scanDirectory函数接受一个目录路径作为参数,并递归地遍历该目录及其子目录中的所有文件。在循环中,readdir函数用于读取目录中的文件和子文件夹。我们通过检查文件名是否为.或..来排除当前目录和上级目录。然后,我们构建文件的完整路径,并使用is\_dir函数检查它是否是一个文件夹。如果是文件夹,我们递归地调用scanDirectory函数来扫描子文件夹。如果是文件,我们进行相应的处理,这里只是简单地打印文件路径,你可以根据需要进行其他操作。

请记得将 'path/to/directory' 替换为你要遍历的实际目录路径。

发表评论 (已有0条评论)

快来评论,快来抢沙发吧~