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