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

数字追雪人
• 阅读 8055

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

echo '<img src="/a.jpg"/>';//服务器根目录
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.'<br>';
            }else{
                echo '文件:'.$filename.'<br>';
            }
        }
        
    }
    //使用倒回句柄,倒回至目录开始,才能再次遍历
    rewinddir($open);
    echo'------------------------------------------<br>';
    while($filename=readdir($open)){
        //过滤掉.和..
        if($filename!=='.'&&$filename!=='..'){
            //注意:此处$filename仅代表目录名或文件名,要访问还要加上路径
            $filename='./test/'.$filename;
            if(is_dir($filename)){
                echo '目录:'.$filename.'<br>';
            }else{
                echo '文件:'.$filename.'<br>';
            }
        }
        
    }    
    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.'<br>';
            echo '文件个数为'.$fileNum.'<br>';            
            closedir($dir);
        }else{
            echo "这个文件名不是目录<br>";
        }
    }
    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).'<GB>';    
    echo $valuable/pow(2,30).'<GB>';

三、建立和删除目录
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');
点赞
收藏
评论区
推荐文章
Easter79 Easter79
3年前
springboot读取外部配置文件
springboot项目打成jar包后不好进行配置文件修改,可设置为读取外部配置文件,方便进行配置修改.步骤:1.将jar包中的application.properties配置文件复制到自定义路径下;2.运行jar包命令指定外部配置文件路径:nohupjavajar.jarspring.config.location
Stella981 Stella981
3年前
Apache服务器的配置——httpd.conf
1、配置根目录DocumentRoot"C:/www/apache2/htdocs"2、配置访问的路径 ServerName127.0.0.13、加载PHP54的模块LoadModulephp5\_module"c:/www/php54/php5apache2\_2.dll"4、设置解析php文件等 AddTypeap
Stella981 Stella981
3年前
Apache禁止解析PHP、禁止指定user_agent、php配置文件
Apache禁止解析PHP某个目录禁止解析PHP,是很有用的。特别是能够上传文件的目录。做网站安全的时候,这用的很多,比如某个目录可以上传文件,为了防止上传的文件有木马,所以我们禁止这个目录下面的访问解析PHP禁止解析PHP修改虚拟主机配置文件vim/usr/local/apache2/conf/ext
Wesley13 Wesley13
3年前
vivo面试经验4(linux基本操作,最基本,必须得会!!)
操作linux通过xshell进行连接;基本操作介绍1.shutdownh关机  shutdownr重启2.mkdiraaa新建目录aaa rmdiraaa删除目录aaa3.cd切换路径  cd~回到home目录文件操作4.touchaaa.txt创建一个文档5.viaaa.txt对aa
Wesley13 Wesley13
3年前
PHP路径操作类
PHP路径操作类,命名方式仿照C的System.IO.Path类。<?phpclassPath{/获取指定路径的目录部分/publicfunctionGetDirectoryName($path){returnp
Wesley13 Wesley13
3年前
JavaSE IO流
1.文件操作:在Java中如何操作磁盘中文件,java中把文件作为一个对象进行操作   File类进行表示磁盘中的文件:   路径:     绝对路径:从磁盘的根目录进行表示如:E:\\vedio\\20170713\\JavaSE\\T\_day01\\question\\常见面试题\_01.t
Wesley13 Wesley13
3年前
2 linux笔记 文件目录管理
2linux笔记文件目录管理2.1Linux文件与目录管理2.1.1绝对路径:路径的写法,由根目录/写起,例如:/usr/share/doc这个目录。2.1.2相对路径:路径的写法,不是由/写起,例如由/usr/share/doc要到/usr/sh
Wesley13 Wesley13
3年前
Ubuntu 下 Apache、php、mysql默认安装路径
apache:如果采用RPM包安装,安装路径应在/etc/httpd目录下apache配置文件:/etc/httpd/conf/httpd.confApache模块路径:/usr/sbin/apachectlweb目录:/var/www/html如果采用源代码安装,一般默认安装在/usr/local/apache2目录下
Stella981 Stella981
3年前
File
一个磁盘路径为:D:\\A\\b,在类中书写路径的时候应该写成:D:\\\\A\\\\b,前面的/是帮后面的/转义。关于Java的File.separator在Windows下的路径分隔符和Linux下的路径分隔符是不一样的,当直接使用绝对路径时,跨平台会暴出“Nosuchfileordiretory”的异常。比如说要在temp目录下建立
Stella981 Stella981
3年前
Linux文件路径、cd命令、mkdir、rmdir、rm命令
第二章文件、目录管理2.6相对路径和绝对路径相对路径相对路径就是相对当前目录来说的,比如我当前在/root下,那么要表示/root/213/可以直接ls213/绝对路径绝对路径是从/(也被称为根目录)开始的,比如/usr、/etc
ISCSI数据盘的多路径配置
本文分享自天翼云开发者社区《》,作者:wn•多路径出现的背景多路径,就是说,主机到存储可以有多条路径可以选择。主机到存储之间的IO由多条路径可以选择。每个主机到所对应的存储可以经过几条不同的路径,如果是同时使用的话,I/O流量如何分配?其中一条路径坏掉了,