PHP 基础教程
PHP 高级教程
PHP & MySQL DATABASE
PHP 示例
PHP 参考手册

PHP 解析目录

在本教程中,您将学习如何使用 PHP 处理目录或文件夹。

在 PHP 中使用目录

在上一章中,您学习了如何在 PHP 中处理文件。 同样,PHP 还允许您使用文件系统上的目录,例如,您可以打开目录并读取其内容、创建或删除目录、列出目录中的所有文件等等。

创建新目录

您可以通过使用要创建的目录的路径和名称调用 PHP mkdir() 函数来创建一个新的空目录,如下例所示:

<?php
// 目录路径
$dir = "testdir";
 
// 检查目录是否存在
if(!file_exists($dir)){
    // 尝试创建目录
    if(mkdir($dir)){
        echo "Directory created successfully.";
    } else{
        echo "ERROR: Directory could not be created.";
    }
} else{
    echo "ERROR: Directory already exists.";
}
?>

要使 mkdir() 函数起作用,目录路径参数中的父目录必须已经存在,例如,如果您指定目录路径为 testdir/subdir,则 testdir 必须存在,否则 PHP 将生成 一个错误。


将文件从一个位置复制到另一个位置

您可以通过调用 PHP copy() 函数将文件从一个位置复制到另一个位置,并将文件的源路径和目标路径作为参数。 如果目标文件已经存在,它将被覆盖。 这是一个在备份文件夹中创建"example.txt"文件副本的示例。

<?php
// 源文件路径
$file = "example.txt";
 
// 目标文件路径
$newfile = "backup/example.txt";
 
// 检查文件是否存在
if(file_exists($file)){
    // Attempt to copy file
    if(copy($file, $newfile)){
        echo "File copied successfully.";
    } else{
        echo "ERROR: File could not be copied.";
    }
} else{
    echo "ERROR: File does not exist.";
}
?>

为了使这个例子工作,目标目录 backup 和源文件,即"example.txt"必须已经存在; 否则 PHP 会产生错误。


列出目录中的所有文件

您可以使用 PHP scandir() 函数列出指定路径内的文件和目录。

现在我们将创建一个自定义函数,该函数将使用 PHP 递归地列出目录中的所有文件。 如果您使用深度嵌套的目录结构,此脚本将很有帮助。

<?php
// 定义一个函数来输出目录中的文件
function outputFiles($path){
    // 检查目录是否存在
    if(file_exists($path) && is_dir($path)){
        // 扫描该目录下的文件
        $result = scandir($path);
        
        // 过滤掉当前 (.) 和父 (..) 目录
        $files = array_diff($result, array('.', '..'));
        
        if(count($files) > 0){
            // 循环通过重新调整的数组
            foreach($files as $file){
                if(is_file("$path/$file")){
                    // 显示文件名
                    echo $file . "<br>";
                } else if(is_dir("$path/$file")){
                    // 如果找到目录,则递归调用该函数
                    outputFiles("$path/$file");
                }
            }
        } else{
            echo "ERROR: No files found in the directory.";
        }
    } else {
        echo "ERROR: The directory does not exist.";
    }
}
 
// Call the function
outputFiles("mydir");
?>

列出某种类型的所有文件

在处理目录和文件结构时,有时您可能需要找出目录中某些类型的文件,例如仅列出 .text.png 文件等。您可以使用 PHP glob() 函数,它根据模式匹配文件。

以下示例中的 PHP 代码将搜索 documents 目录并列出所有扩展名为 .text 的文件。 它不会搜索子目录。

<?php
/* 搜索目录并循环遍历
返回包含匹配文件的数组 */
foreach(glob("documents/*.txt") as $file){
    echo basename($file) . " (size: " . filesize($file) . " bytes)" . "<br>";
}
?>

glob() 函数也可用于查找目录或其子目录中的所有文件。 以下示例中定义的函数将递归列出目录中的所有文件,就像我们在前面的示例中使用 scandir() 函数所做的那样。

<?php
// 定义一个函数来输出目录中的文件
function outputFiles($path){
    // 检查目录是否存在
    if(file_exists($path) && is_dir($path)){
        // 搜索该目录下的文件
        $files = glob($path ."/*");
        if(count($files) > 0){
            // 循环通过重新调整的数组
            foreach($files as $file){
                if(is_file("$file")){
                    // 只显示文件名
                    echo basename($file) . "<br>";
                } else if(is_dir("$file")){
                    // 如果找到目录,则递归调用该函数
                    outputFiles("$file");
                }
            }
        } else{
            echo "ERROR: No such file found in the directory.";
        }
    } else {
        echo "ERROR: The directory does not exist.";
    }
}
 
// Call the function
outputFiles("mydir");
?>
Advertisements