PHP实现递归复制整个文件夹的类实例

周予安
周予安
发布时间:2026-10-13 | 2人浏览过
原创

本文提供了一款实用的PHP类,旨在解决递归复制整个文件夹的需求。该解决方案通过自动识别文件类型并动态创建目标路径,实现了从源目录到目标目录的一键式内容迁移。

结果与目标

在使用本方案后,您可以将一个包含多层级子目录和文件的源文件夹,完整地复制到指定的目标位置。这一过程无需手动遍历每一层级,系统会自动处理嵌套结构,确保所有数据和目录属性被保留。

准备条件

  • 一台运行PHP环境的服务器或本地开发机。
  • 明确的源文件夹路径($fromFile)和目标文件夹路径($toFile)。
  • 确保目标路径所在的父目录存在,或者类中具备创建目录的权限。

真实操作顺序

第1步:编写递归复制类

首先,定义一个名为 CopyFile 的类,该类包含两个核心属性:fromFile 用于存储源路径,toFile 用于存储目标路径。同时包含两个主要方法:

  • copyFile($fromFile, $toFile):负责遍历源目录,区分文件与子目录,进行复制或递归调用。
  • CreateFolder($dir, $mode):负责递归创建目标路径中缺失的目录结构。
<?php
/*
 * 文件夹复制类
 */
class CopyFile
{
public $fromFile;
public $toFile;

/*
 * $fromFile 要复制谁
 * $toFile 复制到那
 */
function copyFile($fromFile,$toFile){
  // 1. 确保目标主目录存在
  $this->CreateFolder($toFile);
  
  // 2. 打开源目录句柄
  $folder1=opendir($fromFile);
  
  // 3. 遍历目录项
  while($f1=readdir($folder1)){
    // 忽略当前目录(.)和上级目录(..)
    if($f1!="." && $f1!=".."){
      $path2="$fromFile/$f1";
      
      // 4. 判断是文件还是目录
      if(is_file($path2)){  
        // 如果是文件,直接复制
        $file = $path2;
        $newfile = "$toFile/$f1";
        copy($file, $newfile);
      }elseif(is_dir($path2)){
        // 如果是目录,递归调用copyFile
        $toFiles = $toFile.'/'.$f1;
        $this->copyFile($path2,$toFiles);
      }
    }
  }
  closedir($folder1); // 建议关闭句柄
}

/*
 * 递归创建文件夹
 */
function CreateFolder($dir, $mode = 0777){
  if (is_dir($dir) || @mkdir($dir,$mode)){
    return true;
  }  
  // 如果当前目录不存在,递归创建父目录
  if (!$this->CreateFolder(dirname($dir),$mode)){
   return false;
  }
  return @mkdir($dir, $mode);
}
}

第2步:实例化并执行复制

在确认类代码无误后,可以通过实例化 CopyFile 对象来执行具体的复制任务。您只需传入源目录字符串和目标目录字符串即可。

// 使用方法
// 引入本类,直接new copyFile('源目录','目标目录');
$file = new CopyFile('source_folder', 'destination_folder');
$file->copyFile('source_folder', 'destination_folder');

在实际操作中,请将上述代码中的 'source_folder' 替换为您本地的实际路径,例如 '/var/www/html/images',将 'destination_folder' 替换为期望复制到的路径,如 '/tmp/backups/images'。

完成判断

当代码执行完毕且未抛出任何致命错误时,检查目标路径是否存在,其内部的文件数量和结构与源路径是否一致。如果一致,则说明递归复制成功。注意:原代码中未处理权限问题,若遇到权限拒绝错误,请检查Web服务用户对目标目录的写入权限。

简要总结

以上就是PHP实现递归复制整个文件夹的详细类实例内容,更多关于PHP文件操作与自动化脚本的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表