php 批量進行複製檔案

來源:互聯網
上載者:User

標籤:環境   app   erro   結束   lang   過程   htm   desc   this   

php 批量進行複製檔案

1、前言

目標:php批量進行複製指定的目錄檔案夾下所有檔案複製到另一個檔案夾下

所使用的的php函數:is_dir,opendir,readdir,scandir,mkdir,closedir,等等(註:其他檔案操作函數也可以完成,這裡只列舉了本次使用的函數)

 

2、相關函數介紹

2.1、is_dir

詳情參考:https://www.w3cschool.cn/php/func-filesystem-is-dir.html

2.2、opendir

詳情參考:https://www.w3cschool.cn/php/func-directory-opendir.html

2.3、readdir

詳情參考:https://www.w3cschool.cn/php/func-directory-readdir.html

2.4、scandir

詳情參考:https://www.w3cschool.cn/php/func-directory-scandir.html

2.5、mkdir

詳情參考:https://www.w3cschool.cn/php/func-filesystem-mkdir.html

2.6、closedir

詳情參考:https://www.w3cschool.cn/php/func-directory-closedir.html

3、本次測試的目錄結構

targetDir下有兩個空目錄

copyDir 下有兩個等待覆制的目標檔案

本次測試的目的:

將copyDir下的兩個目錄,完成的複製到targetDir下的兩個空目錄中

4、代碼構成

 

<?phpclass fileObj{/** * [allCopy description]  將來源目錄的檔案複製到目標目錄的所有子檔案夾上 * @param  [type] $rootDir    [description]  目標目錄 * @param  [type] $resouceDir [description]  來源目錄 * @return [type]             [description] */public function allCopy($rootDir, $resouceDir) {//如果有一個不是目錄,則結束if(is_dir($rootDir) && is_dir($resouceDir)){$this->preDir($rootDir, $resouceDir);}else{echo ‘所選擇目錄不是有效目錄‘;}}/** * [preDir description]  複製前對目標目錄的預先處理 * @param  [type] $rootDir    [description] 目標目錄 * @param  [type] $resouceDir [description]  來源目錄 * @return [type]             [description] */private function preDir($rootDir, $resouceDir) {$dh = opendir($rootDir);//開啟目標目錄while($handle = readdir($dh)) {//每個目錄都含有上級目錄和本級目錄的標誌if($handle == ‘.‘ || $handle == ‘..‘) {continue;}$targetDir = $rootDir.‘/‘.$handle;//需要加上根目錄echo $targetDir;if(is_dir($targetDir) && !$this->sizeofDir($targetDir)) {continue;//這裡不處理非空目錄,自動過濾非目錄}echo 1;$this->startCopy($targetDir, $resouceDir);}closedir($dh);}/** * [startCopy description]  進行檔案的複製操作 * @param  [type] $targetDir  [description]  目標目錄 * @param  [type] $resouceDir [description]  來源目錄子目錄 * @return [type]             [description] */private function startCopy($targetDir, $resouceDir) {$dh = opendir($resouceDir);//掃描來源目錄while($handle = readdir($dh)) {// .和..不進行處理if($handle == ‘.‘ || $handle == ‘..‘) {continue;}$newResource = $resouceDir.‘/‘.$handle;//如果是目錄,則需要建立相同目錄,進行複製if(is_dir($newResource)) {$newTargetDir = $this->createDir($targetDir, $handle);$this->startCopy($newTargetDir,$newResource);//遇到目錄需要進行遞迴調用}else {$re = copy($newResource, $targetDir.‘/‘.$handle);if(!$re){//將複製失敗檔案寫到日誌中file_put_contents(‘error.log‘,$targetDir.‘/‘.$handle."複製失敗\r\n",FILE_APPEND);}}}}/** * [createDir description]  建立和來源目錄相同的檔案目錄 * @param  [type] $dirName [description] 新目錄根目錄 * @param  [type] $copyDir [description] 來源目錄子目錄 * @return [type]          [description] */private function createDir($dirName, $copyDir) {$newDir = $dirName.‘/‘.$copyDir;//判斷目錄是否存在if(!is_dir($newDir)){mkdir($newDir);}return $newDir;}/** * [sizeofDir description]  判斷目錄是否值含有.和.. * @param  [type] $dirName [description]  目錄名稱 * @return [type]          [description] */private function sizeofDir($dirName) {$dh = scandir($dirName);if(sizeof($dh) <= 2){return true;//空目錄}return false;}}
調用:

 

 

<?phprequire_once ‘fileObj.class.php‘;$fileObj = new fileObj();$fileObj->allCopy(‘targetDir‘,‘copyDir‘);
查看運行結果:
從結果上看,已經達成了所需要的檔案的複製

 

5、結語
檔案批量複製的步驟基本為:
1、掃描目標目錄擷取所有需要複製的子目錄(空目錄)
2、掃描來源目錄進行複製(判斷是否檔案還是目錄)
3、如果是檔案則直接進行複製,如果是目錄則遞迴調用2過程進行重新掃描(記得建立相同的目錄)
4、複製量大,環境原因,總有失敗的時候,記得需要記錄

php 批量進行複製檔案

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.