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);
$this