PHP递归复制、移动目录的自定义函数分享


Posted in PHP onNovember 18, 2014

虽然复制一个目录是文件操作的基本功能。但PHP中也没有给出特定的函数,同样需要自定义一个递归函数实现。要复制一个包含多个子目录的目录,将涉及文件的复制、目录创建等操作。复制一个文件可以通过PHP提供的copy()函数完成,创建目录可以使用mkdir()函数。定义函数时,首先对源目录进行遍历,如果遇到的是普通文件,直接使用copy()函数进行复制。如果遍历时遇到一个目录,则必须建立该目录,然后再对该目录下的文件进行复制操作,如果还有子目录,则使用递归重复操作,最终将整个目录复制完成。自定义的递归函数复制目录的程序代码如下所示:

<?php

//自定义函数递归的复制带有多级子目录的目录

function copyDir($dirSrc,$dirTo){

    if(is_file($dirTo)){      //如果目标不是一个目录则退出

        echo "目标不是目录不能创建!!";

        return; //退出函数

    }

    if(!file_exists($dirTo)){       //如果目标不是一个目录则退出

       mkdir($dirTo);              //创建目录

    }

 

    if($dir_handle = @opendir($directory)){         //打开目录,并判断是否能成功打开

        while($filename = readdir($dir_handle)){          //循环遍历目录下的所有文件

            if($filename != "."&& $filename != ".."){          //一定要排除两个特殊的目录

               $subFile = $directory."/".$filename;          //将目录下的子文件和当前目录相连

               $sunToFile = $dirTo."/".$filename;          //将目标目录的多级子目录相连

               if(is_dir($subSrcFile))          //如果为目录则条件成立

                   copyDir($subSrcFile,$subToFile);          //递归调用自己复制子目录

               if(is_file($subSrcFile))          //如果是文件则条件成立

                   copy($subSrcFile,$subToFile);          //直接复制到目标位置

            }

        }

        losedir($dir_handle);          //关闭文件资源

     }

}

 

//测试函数,将目录“phpMyAdmin”复制到“D:/admin”

copyDir("phpMyAdmin","D:/admin");

?>

从安全和跨平台等方面考虑,尽量不要去调用操作系统的SHELL命令“cp-a”完成目录的复制。

PHP 相关文章推荐
example2.php
Oct 09 PHP
15种PHP Encoder的比较
Mar 06 PHP
获取URL文件名后缀
Oct 24 PHP
php中使用gd库实现远程图片下载实例
May 12 PHP
PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠
Sep 30 PHP
学习php设计模式 php实现抽象工厂模式
Dec 07 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
May 09 PHP
Smarty变量用法详解
May 11 PHP
PHP+Ajax异步带进度条上传文件实例
Nov 01 PHP
php编程实现简单的网页版计算器功能示例
Apr 26 PHP
PHP实现带进度条的Ajax文件上传功能示例
Jul 02 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
Mar 26 PHP
PHP打开和关闭文件操作函数总结
Nov 18 #PHP
PHP文件读写操作相关函数总结
Nov 18 #PHP
PHP中通过fopen()函数访问远程文件示例
Nov 18 #PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
Nov 18 #PHP
PHP文件锁函数flock()详细介绍
Nov 18 #PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
Nov 18 #PHP
PHP操作文件的一些基本函数使用示例
Nov 18 #PHP
You might like
DIY实用性框形天线
2021/03/02 无线电
PHP 文件缓存的性能测试
2010/04/25 PHP
PHP微信红包生成代码分享
2016/10/06 PHP
使用PHP免费发送定时短信的实例
2016/10/24 PHP
PHP实现的用户注册表单验证功能简单示例
2019/02/25 PHP
ExtJS Store的数据访问与更新问题
2010/04/28 Javascript
JQuery插件Style定制化方法的分析与比较
2012/05/03 Javascript
为什么要在引入的css或者js文件后面加参数的详细讲解
2013/05/03 Javascript
使用GruntJS构建Web程序之安装篇
2014/06/04 Javascript
js随机生成网页背景颜色的方法
2015/02/26 Javascript
全面解析JavaScript中的valueOf与toString方法(推荐)
2016/06/14 Javascript
JavaScript prototype属性详解
2016/10/25 Javascript
详解ES6中的let命令
2020/04/05 Javascript
详解利用jsx写vue组件的方法示例
2017/07/17 Javascript
vue购物车插件编写代码
2017/11/27 Javascript
webpack搭建vue 项目的步骤
2017/12/27 Javascript
jQuery实现table表格信息的展开和缩小功能示例
2018/07/21 jQuery
Python高效编程技巧
2013/01/07 Python
python实现ipsec开权限实例
2014/11/11 Python
Python 列表排序方法reverse、sort、sorted详解
2016/01/22 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
2019/01/05 Python
django模型动态修改参数,增加 filter 字段的方式
2020/03/16 Python
详解matplotlib中pyplot和面向对象两种绘图模式之间的关系
2021/01/22 Python
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
酒店总经理助理职责
2014/02/12 职场文书
卫生院健康教育实施方案
2014/06/07 职场文书
土建工程师岗位职责
2014/06/10 职场文书
职工小家建设活动方案
2014/08/25 职场文书
贵阳市党的群众路线教育实践活动党(工)委领导班子整改方案
2014/10/26 职场文书
成本会计实训报告
2014/11/05 职场文书
教师个人考察材料
2014/12/16 职场文书
深入理解以DEBUG方式线程的底层运行原理
2021/06/21 Java/Android
【海涛教你打DOTA】剑圣第一人称视角解说
2022/04/01 DOTA
Win11应用商店打开闪退怎么解决? win11应用商店打不开的多种解决办法
2022/04/05 数码科技
vue如何实现关闭对话框后刷新列表
2022/04/08 Vue.js
Mysql 8.x 创建用户以及授予权限的操作记录
2022/04/18 MySQL