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');