1、解析目录路径
1.PHP程序、配置文件、Apache配置文件中涉及路径均使用/,也能够使用目录分隔符常量DIRECTORY_SEPARATOR进行链接(麻烦)
2.多路径分隔符Windows;Linux:,也能够使用路径分隔符常量PATH_SEPARATOR进行链接
3.程序换行符常量PHP_EOL
4.相对路径:./当前目录../上级目录
5.不一样的根路径php
echo '<img src="/a.jpg"/>';//服务器根目录 mkdir('/hello');//操做系统盘根目录
6.路径解析函数数组
a.basename()取文件名 b.dirname()取目录名 c.pathinfo()将路径信息返回成数组 d.realpath()返回规范化的绝对路径名
2、遍历目录
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);
3、统计目录中个数和大小
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.使用递归统计目录大小,即目录下全部文件大小的和lua
$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.统计磁盘/磁盘可用空间大小spa
$total=disk_total_space('c:'); $valuable=disk_free_space('c:'); echo $total/pow(2,30).'<GB>'; echo $valuable/pow(2,30).'<GB>';
3、创建和删除目录
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.拷贝非空目录函数:code
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');