正文
方法一览
目录函数:
函数 | 描述 |
---|---|
chdir() | 改变当前的目录。 |
chroot() | 改变根目录。 |
closedir() | 关闭目录句柄。 |
dir() | 返回 Directory 类的实例。 |
getcwd() | 返回当前工作目录。 |
opendir() | 打开目录句柄。 |
readdir() | 返回目录句柄中的条目。 |
rewinddir() | 重置目录句柄。 |
scandir() | 返回指定目录中的文件和目录的数组。 |
文件系统函数:
函数 | 描述 | PHP |
---|---|---|
basename() | 返回路径中的文件名部分。 | 3 |
dirname() | 返回路径中的目录名称部分。 | 3 |
disk_free_space() | 返回目录的可用空间。 | 4 |
disk_total_space() | 返回一个目录的磁盘总容量。 | 4 |
diskfreespace() | disk_free_space() 的别名。 | 3 |
file_exists() | 检查文件或目录是否存在。 | 3 |
glob() | 返回一个包含匹配指定模式的文件名/目录的数组。 | 4 |
is_dir() | 判断指定的文件名是否是一个目录。 | 3 |
mkdir() | 创建目录。 | 3 |
pathinfo() | 返回关于文件路径的信息。 | 4 |
realpath() | 返回绝对路径名。 | 4 |
rename() | 重名名文件或目录。 | 3 |
rmdir() | 删除空的目录。 | 3 |
解说
/**
* 文件写入
* @access public
* @param string $filename 文件名
* @param string $content 文件内容
* @param string $type 默认覆盖,追加:FILE_APPEND
* @return boolean
*/
function putContents($filename, $content = "", $type = null)
{
$dir = dirname($filename);
if (!is_dir($dir)) {
mkdir($dir, 0777, true);
}
if (false === file_put_contents($filename, $content, $type)) {
// 写入错误日志文件
}
}
实例
举几个例子作为开始吧。
一、PHP遍历某个目录下的所有文件和子文件夹的实现代码
方法1,打印在页面上:
function traverse_dir( $path = '.' )
{
$current_dir = opendir( $path );
// opendir()返回一个目录句柄,如 resource(3) of type (stream) ,失败返回false,
while( ( $file = readdir($current_dir) ) !== false ) {
// readdir()返回打开目录句柄中的一个条目
$sub_dir = $path . DIRECTORY_SEPARATOR . $file; // 构建子目录路径
if ( $file == '.' || $file == '..' ) {
continue;
} else if ( is_dir($sub_dir) ) { // 如果是目录,进行递归
echo 'Directory ' . $file . ':';
traverse_dir( $sub_dir );
} else { // 如果是文件,直接输出
echo 'File in Directory ' . $path . ': ' . $file;
}
}
}
traverse_dir(__DIR__);
// 输出如下
//File in Directory /var/www/kk/www: curlread.php
//File in Directory /var/www/kk/www: favicon.ico
//File in Directory /var/www/kk/www: index.html
//File in Directory /var/www/kk/www: index.php
//Directory logs:
//File in Directory /var/www/kk/www/logs: kk.log
//Directory Public:
//Directory css:
//File in Directory /var/www/kk/www/Public/css: account.css
//File in Directory /var/www/kk/www/Public/css: cd.css
//File in Directory /var/www/kk/www/Public/css: detail-jd.css
//File in Directory /var/www/kk/www/Public/css: entrance.css
//File in Directory /var/www/kk/www/Public/css: global.css
//File in Directory /var/www/kk/www/Public/css: guide.css
//Directory images:
//File in Directory /var/www/kk/www/Public/css/images: animated-overlay.gif
//File in Directory /var/www/kk/www/Public/css/images: chicang.png
//File in Directory /var/www/kk/www/Public/css/images: di_mq.png
方法2,储存在数组里返回:
function read_all_dir( $dir = '.' )
{
$result = array();
$handle = opendir( $dir );
if ( $handle ) {
while ( ( $file = readdir( $handle ) ) !== false ) {
if ( $file != '.' && $file != '..') {
$cur_path = $dir . DIRECTORY_SEPARATOR . $file;
if ( is_dir( $cur_path ) ) {
$result['dir'][$cur_path] = read_all_dir ( $cur_path );
} else {
$result['file'][] = $cur_path;
}
}
}
closedir($handle);
}
return $result;
}
$result = read_all_dir(__DIR__);
// 返回如下
array(2) {
["file"]=>
array(4) {
[0]=>
string(38) "/var/www/kk/www/curlread.php"
[1]=>
string(37) "/var/www/kk/www/favicon.ico"
[2]=>
string(36) "/var/www/kk/www/index.html"
[3]=>
string(35) "/var/www/kk/www/index.php"
}
["dir"]=>
array(2) {
["/var/www/kk/www/logs"]=>
array(1) {
["file"]=>
array(1) {
[0]=>
string(37) "/var/www/kk/www/logs/kk.log"
}
}
["/var/www/kk/www/Public"]=>
array(1) {
["dir"]=>
array(1) {
["/var/www/kk/www/Public/css"]=>
array(1) {
["file"]=>
array(4) {
[0]=>
string(48) "/var/www/kk/www/Public/css/account.css"
[1]=>
string(43) "/var/www/kk/www/Public/css/cd.css"
[2]=>
string(50) "/var/www/kk/www/Public/css/detail-jd.css"
[3]=>
string(49) "/var/www/kk/www/Public/css/entrance.css"
}
}
}
}
}
}
方法3,用dir()返回对象方式:
function traverse_dir( $path = '.' )
{
$mydir = dir($path);
// dir() 返回Directory 类的实例,如object(Directory)#1 (2) { ["path"]=> string(25) "/var/www/kk/www" ["handle"]=> resource(3) of type (stream) }
while ( $file = $mydir->read() )
{
if ( ( is_dir("$path/$file") ) AND ($file!=".") AND ($file!="..") ) {
traverse_dir( "$path/$file" );
} else {
echo "$file";
}
}
$mydir->close();
}
traverse_dir(__DIR__);
返回如下
方法4,用scandir()列出目录中的文件和目录:
function traverse_dir( $path = '.' )
{
// scandir() 函数返回指定目录中的文件和目录的数组
foreach ( scandir($path) as $afile ) {
if ( $afile=='.'||$afile=='..' ) continue;
if ( is_dir($path.'/'.$afile) ) {
traverse_dir( $path.'/'.$afile );
} else {
echo $path.'/'.$afile;
}
}
}
traverse_dir(__DIR__);
// 返回如下
// /var/www/kk/www/Public/js/skin/layer.css
// /var/www/kk/www/Public/js/skin/layer.ext.css
// /var/www/kk/www/Public/js/swiper.min.js
// /var/www/kk/www/Public/websocket/WebSocket.js
// /var/www/kk/www/Public/websocket/echarts.bak.min.js
// /var/www/kk/www/Public/websocket/echarts.js
// /var/www/kk/www/Public/websocket/echarts.min.js
// /var/www/kk/www/Public/websocket/reconnecting-websocket.js
// /var/www/kk/www/Public/websocket/reconnecting-websocket.min.js
// /var/www/kk/www/Public/websocket/worker.js
// /var/www/kk/www/curlread.php
// /var/www/kk/www/favicon.ico
// /var/www/kk/www/index.html
// /var/www/kk/www/index.php
// /var/www/kk/www/logs/kk.log
方法5,用glob() :
function traverse_dir( $path = '.' )
{
// glob()返回的内容中已经过滤掉了'.'和'..',其中*表示遍历目录下所有文件。
// 相应的,如果改为*.txt,则会遍历目录下所的txt文件
foreach ( glob($path) as $afile ) {
if ( is_dir($afile) ) {
traverse_dir( $afile.'/*' );
} else {
echo $afile;
}
}
}
traverse_dir(__DIR__);
// 返回如下
// /var/www/kk/www/Public/js/skin/layer.css
// /var/www/kk/www/Public/js/skin/layer.ext.css
// /var/www/kk/www/Public/js/swiper.min.js
// /var/www/kk/www/Public/websocket/WebSocket.js
// /var/www/kk/www/Public/websocket/echarts.bak.min.js
// /var/www/kk/www/Public/websocket/echarts.js
// /var/www/kk/www/Public/websocket/echarts.min.js
// /var/www/kk/www/Public/websocket/reconnecting-websocket.js
// /var/www/kk/www/Public/websocket/reconnecting-websocket.min.js
// /var/www/kk/www/Public/websocket/worker.js
// /var/www/kk/www/curlread.php
// /var/www/kk/www/favicon.ico
// /var/www/kk/www/index.html
// /var/www/kk/www/index.php
// /var/www/kk/www/logs/kk.log
参考资料
PHP 手册 函数参考 文件系统相关扩展 目录 目录函数函数 https://www.php.net/manual/zh/ref.dir.php
PHP 5 Directory 函数 https://www.runoob.com/php/php-ref-directory.html
PHP 手册 函数参考 文件系统相关扩展 文件系统 文件系统函数 https://www.php.net/manual/zh/ref.filesystem.php
PHP Filesystem 函数
http://www.w3school.com.cn/php/php_ref_filesystem.asp
http://www.runoob.com/php/php-ref-filesystem.html
http://www.cnblogs.com/zemliu/archive/2012/05/04/2482614.html
http://www.w3school.com.cn/php/php_ref_directory.asp
http://www.w3school.com.cn/php/func_directory_dir.asp