PHP文件目錄(路徑)的操做

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');
相關文章
相關標籤/搜索