当前位置: 首页 > 后端技术 > PHP

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

时间:2023-03-30 05:19:22 PHP

一、解析目录路径1、PHP程序、配置文件、Apache配置文件涉及的路径都使用/,或者可以使用目录分隔符常量DIRECTORY_SEPARATOR来连接(麻烦)2、多路径分隔符Windows;Linux:也可以使用路径分隔符常量PATH_SEPARATOR进行连接3.程序换行符常量PHP_EOL4.相对路径:./当前目录../上级目录5.不同的根路径echo'';//服务器根目录mkdir('/hello');//操作系统磁盘根目录6.路径分析函数a.basename()取文件名b.dirname()取目录名c.pathinfo()返回路径信息为Arrayd.realpath()返回规范化的绝对??路径名2.遍历目录1.glob:将匹配目录下的指定文件放入返回数组2.目录函数:chdir—更改目录chroot—更改根目录?closedir—关闭目录句柄?dir—返回目录类实例?getcwd—获取当前工作目录?opendir—打开目录句柄?readdir—从目录句柄中读取条目?rewinddir—倒回目录句柄?scandir—列出spe中的文件cified路径和目录**注:遍历目录时,前两个文件名。和..应该被过滤掉**$open=opendir('test');/*echoreaddir($open);*/while($filename=readdir($open)){//过滤掉.and..if($filename!=='.'&&$filename!=='..'){//注意:这里的$filename只代表目录名或者文件名,要访问,加上path$filename='./test/'.$文件名;if(is_dir($filename)){echo'Directory:'.$filename.'
';}else{echo'file:'.$filename.'<br>';}}}//在遍历之前使用倒带句柄倒带到目录开头rewinddir($open);回声'----------------------------------------
';while($filename=readdir($open)){//过滤掉.and..if($filename!=='.'&&$filename!=='..'){//注意:这里的$filename只代表目录名或者文件名,路径$filename='./测试/'.$文件名;if(is_dir($filename)){echo'Directory:'.$filename.'
';}else{echo'File:'.$filename.'
';}}}closedir($open);三、统计目录的个数和大小1、用递归统计统计目录下所有文件的个数,如下:$dirNum=0;$文件编号=0;函数getdirnum($filename){if(is_dir($filename)){$dir=opendir($filename);全局$dirNum;全局$fileNum;while($filename=readdir($dir)){if($filename!=='.'&&$filename!=='..'){$filename=$file.'/'.$filename;如果(is_dir($文件名)){$dirNum++;getdirnum($filename);//递归}else{$fileNum++;}}}echo'目录数为'.$dirNum.'
';echo'文件编号为'.$fileNum.'
';关闭目录($目录);}else{echo"此文件名不是目录
";}}getdirnum('测试');2。使用递归统计目录大小,即目录下所有文件大小的总和$size=0;函数dirsize($file){全局$size;如果(is_dir($file)){$dir=opendir($file);while($filename=readdir($dir)){if($filename!=='.'&&$filename!=='..'){$filename=$file.'/'.$filename;如果(is_dir($filename)){$size+=dirsize($filename);}else{$size+=filesize($filename);}}}closedir($dir);}else{$size=filesize($filename);}返回$size/pow(2,10).'MB';}echodirsize('测试');3.磁盘统计/磁盘空闲空间大小$total=disk_total_space('c:');$value=disk_free_space('c:');echo$total/pow(2,30).'';echo$valuable/pow(2,30).'';3、创建和删除目录1.mkdir('test',0644):createdirectoryboolmkdir(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'):delete目录,注意目录要为空3.unlink('test.php'):删除文件4.使用递归删除非空目录,如下:**注意:记得排除目录.和..下面,否则整个磁盘内容将被删除,并且不会进入回收站!**函数deleteDir($dirname){$dir=opendir($dirname);while($filename=readdir($dir)){if($filename!=='.'&&$filename!=='..'){$filename=$dirname.'/'.$filename;如果(is_dir($文件名)){deleteDir($文件名);}else{取消链接($文件名);}}}closedir($dir);rmdir($目录名);}deleteDir('测试');5、复制和移动目录1.rename():重命名一个文件或目录,加上移动文件的路径,所以移动和重命名是一个函数boolrename(string$oldname,string$newname[,resource$context])2.copy():只复制文件,不能复制目录boolcopy(string$source,string$dest[,resource$context])3.复制非空目录函数:functioncopyDir($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{复制($srcfile,$tofile);}}}closedir($dir);}copyDir('test','test222');