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");
?>