php如何遍历目录,php非递归算法遍历目录的例子

发布时间:2020-04-27编辑:脚本学堂
php遍历目录的多个方法,php目录遍历函数opendir用法,php非递归算法遍历目录下所有文件的实例代码,供大家学习参考。

一、php遍历目录方法

1. 方法1
 

复制代码 代码示例:
<?php
function myscandir($pathname){
foreach( glob($pathname) as $filename ){
if(is_dir($filename)){
myscandir($filename.'/*');
}else{
echo $filename.'<br/>';
}
}
}
myscandir('D:/wamp/www/exe1/*');
?>

2. 方法2
 

复制代码 代码示例:
<?php
function myscandir($path){
$mydir=dir($path);
while($file=$mydir->read()){
$p=$path.'/'.$file;
if(($file!=".") AND ($file!="..")){
echo $p.'<br>';
}
if((is_dir($p)) AND ($file!=".") AND ($file!="..")){
myscandir($p);
}
}
}
myscandir(dirname(dirname(__FILE__)));
?>

二、php目录遍历函数opendir用法

opendir()函数的作用:
打开目录句柄,如果该函数成功运行,将返回一组目录流(一组目录字符串),如果失败将返回错误[error],你可以在函数的最前面加上“@”来隐藏错误.

syntax语法:opendir(directory,context) parameter

参数:description

描述:directory required. specifies the directory to stream   
必要参数,指定目录对象,可选参数,指定需要处理的目录对象的context,这个context包括了一组选项,它可以对文本流的显示方式进行改变。

代码:
 

复制代码 代码示例:
<?php
$dir = "./";
 
// open a known directory, and proceed to read its contents
if (is_dir($dir))
{
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
echo "filename: $file : filetype: " . filetype($dir . $file) . "n"."<br />";
}
closedir($dh);
}
}
?>

三、php非递归算法遍历目录下所有文件

php不用递归实现列出目录下所有文件的代码

代码:
 

复制代码 代码示例:

/**
 * PHP 非递归实现查询该目录下所有文件
 * @param unknown $dir
 * @return multitype:|multitype:string
 */
function scanfiles($dir) {
 if (! is_dir ( $dir ))
 return array ();

 // 兼容各操作系统
 $dir = rtrim ( str_replace ( '', '/', $dir ), '/' ) . '/';

 // 栈,默认值为传入的目录
 $dirs = array ( $dir );

 // 放置所有文件的容器
 $rt = array ();

 do {
 // 弹栈
 $dir = array_pop ( $dirs );

 // 扫描该目录
 $tmp = scandir ( $dir );

 foreach ( $tmp as $f ) {
// 过滤. ..
if ($f == '.' || $f == '..')
continue;
 
// 组合当前绝对路径
$path = $dir . $f;
 
// 如果是目录,压栈。
if (is_dir ( $path )) {
array_push ( $dirs, $path . '/' );
} else if (is_file ( $path )) { // 如果是文件,放入容器中
$rt [] = $path;
}
 }

 } while ( $dirs ); // 直到栈中没有目录

 return $rt;
}