PHP文件操作

關於文件的遞歸刪除目錄:注意理清楚各個路徑的使用即可

函數

<?php
//刪除目錄,須知:文件dir只能刪除空的,刪除文件夾用:rmdir(),刪除文件unlink();
//利用句柄當指針使用:readdir();
function del($path)
{
    //去掉錯誤的路徑,自己格式化一次
    $path = rtrim($path,'/');

    //打開句柄
    $resuoce = opendir($path);

    while(false !== $fileName=(readdir($resuoce))){

        if($fileName=='.'||$fileName=='..')continue;

        //echo $path.'/'.$fileName.'<br />';
        $fileNew = $path.'/'.$fileName;

        //下面的參數必須是一個完整的路徑,而不是文件名
        if(is_dir($fileNew)){
            del($fileNew);
        }else{
            unlink($fileNew);
        }
    }
        //刪除空目錄的順序需要在關閉資源之後,因爲:不能刪除一個爲關閉的資源,相當於刪除一個已經打開的文件一個道理;
        closedir($resuoce);//參數是被打開的資源
        rmdir($path);//刪除函數的參數必須是原打開的路徑因爲是遞歸遍歷,而且需要刪除自己打開的資源
}

// 調用
$path = './include';
del($path);

關於文件複製的遞歸函數:注意理清楚各個路徑的使用即可

函數

<?php
/**
*   函數功能複製一個目錄到指定的地方
* @param URL 需要複製的路徑
* @param URL 指定存放的路徑
*/
function copy_file($path,$to_path)
{

    //格式化代碼,按照要求防止輸入參數和符合
    $path= rtrim($path, '/');
    $to_path= rtrim($to_path, '/');
    if($path== '.' || $path== '..' || $to_path== '.' || $to_path== '..') return false;

    //防止源目錄不存在和目標目錄存在
    if(!file_exists($path)  || !is_dir($path)) return false;

    // if(!file_exists($src)){echo 1;}
    if(!file_exists($to_path) || !is_dir($to_path)) mkdir($to_path);

    //打開dir  打開句柄
    $resouce = opendir($path);
    //循環遍歷dir  
    //while(false !== $dirNewName=(readdir($resouce))){
    while(false !== $dirNewName=(readdir($resouce))){

        //防止文件向上遞歸讀取
        if($dirNewName=='.'||$dirNewName=='..')continue;

            //遞歸需要的路徑
            $new_path = $path.'/'.$dirNewName;
            //複製目標需要的路徑
            $copy_fileN = $to_path.$new_path;
            //echo $copy_fileN.'<hr />';
            //遞歸文件夾
            if(is_dir($new_path)){
               // echo $new_path.'<hr />';
                //複製文件夾,在遞歸之前執行是個邏輯順序問題,必須要先有文件夾,下面的文件纔有地方可放
                mkdir($copy_fileN,0777,true);//這裏使用的路徑不能是自己的,要目標的;
                //echo $to_path.'<hr />';
                copy_file($new_path,$to_path);//第二個參數只是起到一個開頭引導作用,和函數體內的拼接目錄作用,所以寫原來 即可;
            }else{
                copy($new_path,$copy_fileN);//參數一:是源目標路徑,參數二:剛剛創建在指定位置的新目錄路徑
            }
        }
        closedir($resouce);

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章