php 批量進行復制文件
阿新 • • 發佈:2017-07-21
w3cschool pre clas 測試 名稱 文件操作 class ret 測試的
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