资讯专栏INFORMATION COLUMN

PHP文件目录(路径)的操作

mingde / 1324人阅读

摘要:一解析目录路径程序配置文件配置文件中涉及路径均使用,也可以使用目录分隔符常量进行连接麻烦多路径分隔符,也可以使用路径分隔符常量进行连接程序换行符常量相对路径当前目录上级目录不同的根路径服务器根目录操作系统盘根目录路径解析函数取文件名取目录名

一、解析目录路径
1.PHP程序、配置文件、Apache配置文件中涉及路径均使用/,也可以使用目录分隔符常量DIRECTORY_SEPARATOR进行连接(麻烦)
2.多路径分隔符Windows;Linux:,也可以使用路径分隔符常量PATH_SEPARATOR进行连接
3.程序换行符常量PHP_EOL
4.相对路径:./当前目录../上级目录
5.不同的根路径

echo "";//服务器根目录
mkdir("/hello");//操作系统盘根目录

6.路径解析函数

a.basename()取文件名
b.dirname()取目录名
c.pathinfo()将路径信息返回成数组
d.realpath()返回规范化的绝对路径名

二、遍历目录
1.glob:匹配目录中指定文件放入返回数组中
2.Directory函数:

•chdir — 改变目录
•chroot — 改变根目录
•closedir — 关闭目录句柄
•dir — 返回一个 Directory 类实例
•getcwd — 取得当前工作目录
•opendir — 打开目录句柄
•readdir — 从目录句柄中读取条目
•rewinddir — 倒回目录句柄
•scandir — 列出指定路径中的文件和目录
**注:遍历目录时,前两个文件名.和..要过滤掉**
    $open=opendir("test");
    /*echo readdir($open);*/
    while($filename=readdir($open)){
        //过滤掉.和..
        if($filename!=="."&&$filename!==".."){
            //注意:此处$filename仅代表目录名或文件名,要访问还要加上路径
            $filename="./test/".$filename;
            if(is_dir($filename)){
                echo "目录:".$filename."
"; }else{ echo "文件:".$filename."
"; } } } //使用倒回句柄,倒回至目录开始,才能再次遍历 rewinddir($open); echo"------------------------------------------
"; while($filename=readdir($open)){ //过滤掉.和.. if($filename!=="."&&$filename!==".."){ //注意:此处$filename仅代表目录名或文件名,要访问还要加上路径 $filename="./test/".$filename; if(is_dir($filename)){ echo "目录:".$filename."
"; }else{ echo "文件:".$filename."
"; } } } closedir($open);

三、统计目录中个数和大小
1.使用递归统计目录下所有文件的个数,如下:

    $dirNum=0;
    $fileNum=0;
    function getdirnum($filename){
        if(is_dir($filename)){
            $dir=opendir($filename);
            global $dirNum;
            global $fileNum;
            while($filename=readdir($dir)){                
                if($filename!=="."&&$filename!==".."){
                    $filename=$file."/".$filename;
                    if(is_dir($filename)){
                        $dirNum++;
                        getdirnum($filename);//递归
                    }else{
                        $fileNum++;
                    }    
                }
            }
            echo "目录个数为".$dirNum."
"; echo "文件个数为".$fileNum."
"; closedir($dir); }else{ echo "这个文件名不是目录
"; } } getdirnum("test");

2.使用递归统计目录大小,即目录下所有文件大小的和

    $size=0;
    function dirsize($file){
        global $size;
        if(is_dir($file)){
            $dir=opendir($file);            
            while($filename=readdir($dir)){                
                if($filename!=="."&&$filename!==".."){
                    $filename=$file."/".$filename;
                    if(is_dir($filename)){
                        $size+=dirsize($filename);
                    }else{
                        $size+=filesize($filename);
                    }    
                }
            }        
            closedir($dir);
        }else{
            $size=filesize($filename);
        }
        return $size/pow(2,10)."MB";
    }
    echo dirsize("test");

3.统计磁盘/磁盘可用空间大小

    $total=disk_total_space("c:");
    $valuable=disk_free_space("c:");
    echo $total/pow(2,30)."";    
    echo $valuable/pow(2,30)."";

三、建立和删除目录
1.mkdir("test",0644):创建目录
bool mkdir ( string $pathname [, int $mode = 0777 [, bool $recursive = false [, resource $context ]]] )
注:$mode为权限,用户、组、其他用户各自有r=4/w=2/x=1的权限,如0644为rw_/r__/r__(Linux权限的知识)
2.rmdir("test"):删除目录,注意目录要为空
3.unlink("test.php"):删除文件
4.利用递归删除非空目录,如下:

**注:切记排除目录下的.和..,否则会删除整个磁盘内容,且不进回收站!**
    function deleteDir($dirname){
        $dir=opendir($dirname);
        while($filename=readdir($dir)){
            if($filename!=="."&&$filename!==".."){
                $filename=$dirname."/".$filename;
                if(is_dir($filename)){
                    deleteDir($filename);
                }else{
                    unlink($filename);
                }
            }
    
        }    
            
        closedir($dir);
        rmdir($dirname);
    }
    deleteDir("test");

5.复制和移动目录
1.rename():重命名一个文件或目录,加上路径后即为移动文件,因此移动和重命名是一个函数
bool rename ( string $oldname , string $newname [, resource $context ] )
2.copy():只能拷贝文件,无法拷贝目录
bool copy ( string $source , string $dest [, resource $context ] )
3.拷贝非空目录函数:

    function copyDir($dirname,$dircopy){        
        mkdir($dircopy);
        $dir=opendir($dirname);
        while($filename=readdir($dir)){
            if($filename!=="."&&$filename!==".."){
                $srcfile=$dirname."/".$filename;//原目录名或文件名
                $tofile=$dircopy."/".$filename;//新目录名或文件名
                if(is_dir($srcfile)){
                    copyDir($srcfile,$tofile);
                }else{
                    copy($srcfile,$tofile);
                }
            }    
        }
        closedir($dir);
        
    }
    copyDir("test","test222");

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/25702.html

相关文章

  • PHP 文件系统完全指南

    摘要:同时,还封装了常用目录及文件操作的面向对象接口和迭代器接口方便大家使用文件系统的元数据什么是元数据元数据通俗一点讲就是数据的数据。 本文首发于个人博客 PHP 文件系统完全指南,转载请注明出处。 今天我们将开启一个新的探索旅程,深入到 PHP 文件系统中,系统的学习和掌握 PHP 文件系统的基本使用。 相信大家在日常研发过程中,难免需要和各种文件纠缠不清。比如,打开 .env 文件并从...

    source 评论0 收藏0
  • PHP开发手册》笔记之PHP中关于目录操作函数

    摘要:例子读取目录中的文件关闭返回的资源对象运行结果表示当前目录表示上一级目录目录中的文件目录中的文件目录中的文件创建目录要创建的目录地址例子创建目录创建目录删除目录要删除的目录地址,该目录必须是一个空目录例子删除目录删除目录 打开目录 opendir(string path);//path--目录所在的路径,返回一个资源对象,用于存储当前目录资源 bool is_dir(string p...

    JinB 评论0 收藏0
  • 徒手用 Docker 构建自己 PHP 开发环境

    摘要:用进行操作为在的工作区域,项目也是挂载在里面,所有我们可以直接在容器里运行。或者进入宿主机目录下用命令注意事项注意挂载路径构建失败时,注意容器内是否报错加速镜像。本文首发在我的博客徒手用构建自己的开发环境 1. 前言 1.1 为什么要用 Docker ? 是否有这样的场景,你搞了一个项目,在本地开发时需要搭建环境,放到线上时也需要搭建环境,到公司想暗戳戳玩一下要搭建环境,不搭还不行,因...

    CoreDump 评论0 收藏0

发表评论

0条评论

mingde

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<