php遍历目录与文件夹的多种方法详解
2023-06-13 09:15:12 时间
遍历目录或遍历目录下指定类型的文件,这是每一个童鞋在写程序的时候难免会用到的。PHP本身也提供了很多灰常有用的函数,正确地使用它们,不会有错滴。
下面就我个人学习过程中的一些总结,希望对想学PHP的童鞋有所帮助。
本函数可以列出指定目录下所有的文件(包括子目录下的)
functiongetfiles($path){
foreach(scandir($path)as$afile)
{
if($afile=="."||$afile=="..")continue;
if(is_dir($path."/".$afile))
{
getfiles($path."/".$afile);
}else{
echo$path."/".$afile."<br/>";
}
}
}//简单的demo,列出当前目录下所有的文件
getfiles(__DIR__);
scandir()是返回指定目录下所有的文件和目录组成的数组,在PHP中,还提供了一个灰常强大的函数glob(),glob()有2个参数,至于第2个参数是可选的,稍后再讲。直接来看,用glob()怎么遍历目录的。
可以看出,glob()返回的内容中已经过滤掉了"."和"..",其中*表示遍历目录下所有文件。相应的,如果改为*.txt,则会遍历目录下所的txt文件。是不是很方便呢?它的方便之处可不止这一点,据元芳说,这里面还藏着一个天大的秘密,是什么呢?以后再说,有兴趣的话,可以给我留言交流。
functiongetfiles($path){
foreach(glob($path)as$afile){
if(is_dir($afile))
{getfiles($afile."/*");}else{echo$afile."<br/>";}
}
}//简单的demo,列出当前目录下所有的文件
getfiles(__DIR__);0
既然说用*.txt,就会遍历目录下所的txt文件,那如果我想让它同时遍历某几种格式的文件呢?怎么办?肯定有童鞋想到用数组了,然后很快的写出来替换进去{*.txt,*.jpg,*.zip,...},当然也很快地发现,程序返回false,什么都得不到。不要失望,这涉及到了刚才所说的第2个可选参数,这个参数是用来改变glob的行为的,具体都有些什么,可以查阅PHP手册,这里不多讲,只说一个GLOB_BRACE,这是用来扩充{a,b,c,...}来匹配"a","b"或"c",...的。用法如下:foreach(glob($path."/{*.txt,*.jpg,*.zip,...}",GLOB_BRACE)as$fileName){...}
至于完整的遍历目录下所有的指定文件类型函数,我们可以看下面实例
遍历文件夹及子文件夹所有文件
<html>
<body>
<?php
functiontraverse($path="."){
$current_dir=opendir($path); //opendir()返回一个目录句柄,失败返回false
while(($file=readdir($current_dir))!==false){ //readdir()返回打开目录句柄中的一个条目
$sub_dir=$path.DIRECTORY_SEPARATOR.$file; //构建子目录路径
if($file=="."||$file==".."){
continue;
}elseif(is_dir($sub_dir)){ //如果是目录,进行递归
echo"Directory".$file.":<br>";
traverse($sub_dir);
}else{ //如果是文件,直接输出
echo"FileinDirectory".$path.":".$file."<br>";
}
}
}
traverse("xxtt");
?>
</body>
</html>
一些常用的实例
<?php
$dir="E:/video";//这里输入其它路径
//PHP遍历文件夹下所有文件
$handle=opendir($dir.".");
echo"文件:<br>";
while(false!==($file=readdir($handle)))
{
if($file!="."&&$file!=".."){
echo$file;//输出文件名
}
}
closedir($handle);
?>
用了这段代码遍历所有文件,帮我把所有文件名存为一个数组。
<?php
$s=explode("/n",trim(`dir/be://video`));
print_r($s);
?>
<?php
$dir="E:/video";//这里输入其它路径
//PHP遍历文件夹下所有文件
$handle=opendir($dir.".");
echo"文件:<br>";
while(false!==($file=readdir($handle)))
{
if($file!="."&&$file!=".."){
$file=$file.",";//输出文件名
$file=explode(",",$file);
}
}
print_r($file);//输出的就是数组了
closedir($handle);
?>
<?php
$dir=".";//这里输入其它路径
//PHP遍历文件夹下所有文件
$handle=opendir($dir.".");
echo"文件:<br>";
//定义用于存储文件名的数组
$array_file=array();
while(false!==($file=readdir($handle)))
{
if($file!="."&&$file!=".."){
$array_file[]=$file;//输出文件名
}
}
closedir($handle);
print_r("<pre>");
print_r($array_file);
print_r("</pre>");
?>
相关文章
- PHP时区设置相差8小时间程序与php.ini配置方法
- php 字符串替换中文,PHP中文字符串替换其中为*的方法
- MySQL异常捕获:使用PHP技巧轻松完成(php捕获mysql异常)
- PHP连接MySQL数据库的步骤与方法(php如何连接mysql)
- 环境管理 Linux下如何实现多版本PHP环境管理(linux多php版本)
- Linux 查看 PHP 版本的方法(linux查php版本)
- 版本实现Linux安装多个PHP版本的方法(linux安装多个php)
- 使用PHP执行Linux脚本:简单而快速!(php执行linux脚本)
- 查询使用PHP运行MySQL查询的步骤(php运行mysql)
- Linux系统下PHP安装Redis扩展的步骤(php安装redis)
- MySQL事务处理流程及PHP实现(mysql事务php)
- 搭建 PHP 环境,在 Linux 系统里更轻松!(php环境linux)
- PHP连接MSSQL库的方法(php链接mssql)
- PHP与Redis出色的结合(php连redis)
- 数据PHP实现MySQL数据导出的实现方法(php导出mysql)
- PHP与MySQL连接失败如何解决?(php连接不上mysql)
- Android实现PHP连接MySQL进行数据交互(android通过php连接mysql)
- Linux下PHP的安装与配置(linux安装配置php)
- Linux无法解析PHP文件,如何解决(linux 不解析php)
- PHP管理MSSQL的方法探索(Php管理mssql)
- 服务器深入比较:PHP数据库与MSSQL服务器(php数据库和mssql)
- 一步一步教你PHP操作MSSQL的下载方法(php_mssql下载)
- Linux查看PHP版本的方法简介(linux查看php版本)
- php去除换行符的方法小结(PHP_EOL变量的使用)
- php另类上传图片的方法(PHP用Socket上传图片)
- PHP循环遍历数组的3种方法list()、each()和while总结