PHP遞迴複製、移動目錄的自訂函數分享_php技巧

來源:互聯網
上載者:User

雖然複製一個目錄是檔案操作的準系統。但PHP中也沒有給出特定的函數,同樣需要自訂一個遞迴函式實現。要複製一個包含多個子目錄的目錄,將涉及檔案的複製、目錄建立等操作。複製一個檔案可以通過PHP提供的copy()函數完成,建立目錄可以使用mkdir()函數。定義函數時,首先對來源目錄進行遍曆,如果遇到的是普通檔案,直接使用copy()函數進行複製。如果遍曆時遇到一個目錄,則必須建立該目錄,然後再對該目錄下的檔案進行複製操作,如果還有子目錄,則使用遞迴重複操作,最終將整個目錄複寫完成。自訂的遞迴函式複製目錄的程式碼如下所示:

複製代碼 代碼如下:

<?php
//自訂函數遞迴的複製帶有多級子目錄的目錄
function copyDir($dirSrc,$dirTo){
    if(is_file($dirTo)){      //如果目標不是一個目錄則退出
        echo "目標不是目錄不能建立!!";
        return; //退出函數
    }
    if(!file_exists($dirTo)){       //如果目標不是一個目錄則退出
       mkdir($dirTo);              //建立目錄
    }
 
    if($dir_handle = @opendir($directory)){         //開啟目錄,並判斷是否能成功開啟
        while($filename = readdir($dir_handle)){          //迴圈遍曆目錄下的所有檔案
            if($filename != "."&& $filename != ".."){          //一定要排除兩個特殊的目錄
               $subFile = $directory."/".$filename;          //將目錄下的子檔案和目前的目錄相連
               $sunToFile = $dirTo."/".$filename;          //將目標目錄的多級子目錄相連
               if(is_dir($subSrcFile))          //如果為目錄則條件成立
                   copyDir($subSrcFile,$subToFile);          //遞迴調用自己複製子目錄
               if(is_file($subSrcFile))          //如果是檔案則條件成立
                   copy($subSrcFile,$subToFile);          //直接複製到目標位置
            }
        }
        losedir($dir_handle);          //關閉檔案資源
     }
}
 
//測試函數,將目錄“phpMyAdmin”複製到“D:/admin”
copyDir("phpMyAdmin","D:/admin");
?>

從安全和跨平台等方面考慮,盡量不要去叫用作業系統的SHELL命令“cp-a”完成目錄的複製。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.