PHP获取目录以及文件

用到的系统函数有:opendir(),readdir(),closedir()。

opendir():

resource opendir ( string $path [, resource $context ] )
//path 要打开的目录路径 
//context context 参数的说明见手册中的 Streams API 一章。 

打开一个目录句柄,可用于之后的 closedir(),readdir() 和 rewinddir() 调用中。

Example #1 opendir() 例子

<?php
$dir = "/etc/php5/";

// 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";
        }
        closedir($dh);
    }
}
?> 

readdir():

resource opendir ( string $path [, resource $context ] )
//dir_handle 目录句柄的 resource,之前由 opendir() 打开 

返回目录中下一个文件的文件名。文件名以在文件系统中的排序返回。

Example #1 列出目录中的所有文件

<?php
// 注意在 4.0.0-RC2 之前不存在 !== 运算符

if ($handle = opendir('/path/to/files')) {
    echo "Directory handle: $handle\n";
    echo "Files:\n";

    /* 这是正确地遍历目录方法 */
    while (false !== ($file = readdir($handle))) {
        echo "$file\n";
    }

    /* 这是错误地遍历目录的方法 */
    while ($file = readdir($handle)) {
        echo "$file\n";
    }

    closedir($handle);
}
?> 

Example #2 列出当前目录的所有文件并去掉 . 和 ..

<?php
if ($handle = opendir('.')) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
            echo "$file\n";
        }
    }
    closedir($handle);
}
?> 

closedir():

void closedir ( resource $dir_handle )
//dir_handle 目录句柄的 resource,之前由 opendir() 所打开的。 

关闭由 dir_handle 指定的目录流。流必须之前被 opendir() 所打开。

Example #1 closedir() 例子

<?php
$dir = "/etc/php5/";

// Open a known directory, read directory into variable and then close
if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        $directory = readdir($dh);
        closedir($dh);
    }
}
?> 

代码部分:

<?php
/**
 * 获取目录以及文件 date : 2012-10-08
 */
function get_file($path){
	$current_dir = opendir($path);  //openfile()返回一个目录句柄,失败则false
	while (($file = readdir($current_dir)) !==false){ //readdir()返回打开目录句柄中的一个条目
		$sub_dir = $path . DS . $file; //形成子目录形式
		if($file == '.' || $file == '..'){ 
			continue;
		}else if(is_dir($sub_dir)){ //如果是有效子目录则递归调用
			echo 'directory '.$file;
			echo "<br>";
			get_file($path); //调用自身
			closedir($current_dir);//
		}else{
			echo 'file in directory '. $path. ':' .$file;
		}
	}
}
?>

实例:

<?php
get_file('./11');
?>