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、代碼構成
<?php class 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);