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 相关文章推荐
apache+php+mysql安装配置方法小结
Aug 01 PHP
PHP清除数组中所有字符串两端空格的方法
Oct 20 PHP
PHP生成RSS文件类实例
Dec 05 PHP
PHP中开启gzip压缩的2种方法
Jan 31 PHP
php curl 获取https请求的2种方法
Apr 27 PHP
CodeIgniter使用smtp服务发送html邮件的方法
Jun 10 PHP
PHP从数组中删除元素的四种方法实例
May 12 PHP
thinkPHP显示不出验证码的原因与解决方法分析
May 20 PHP
浅析PHP类的反射来实现依赖注入过程
Feb 06 PHP
PHP设计模式之装饰器模式实例详解
Feb 07 PHP
PHP实现的pdo连接数据库并插入数据功能简单示例
Mar 30 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
Dec 25 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
php 时间计算问题小结
2009/01/04 PHP
微博短链接算法php版本实现代码
2012/09/15 PHP
PHP的switch判断语句的“高级”用法详解
2014/10/01 PHP
PHP怎样用正则抓取页面中的网址
2016/08/09 PHP
PHP精确计算功能示例
2016/11/29 PHP
PHP实现留言板功能的详细代码
2017/03/25 PHP
laravel ORM关联关系中的 with和whereHas用法
2019/10/16 PHP
JS实现一键回顶功能示例代码
2013/10/28 Javascript
获取鼠标在div中的相对位置的实现代码
2013/12/30 Javascript
js的2种继承方式详解
2014/03/04 Javascript
将HTML的左右尖括号等转义成实体形式的两种实现方式
2014/05/04 Javascript
javascript实现验证IP地址等相关信息代码
2015/05/10 Javascript
javascript设计模式之对象工厂函数与构造函数详解
2015/07/30 Javascript
第三篇Bootstrap网格基础
2016/06/21 Javascript
jquery 中toggle的2种用法详解(推荐)
2016/09/02 Javascript
jQuery异步提交表单实例
2017/05/30 jQuery
浅析vue-router jquery和params传参(接收参数)$router $route的区别
2018/08/03 jQuery
在Vue环境下利用worker运行interval计时器的步骤
2019/08/01 Javascript
layer.open 子页面弹出层向父页面传输数据的例子
2019/09/26 Javascript
Python中使用Boolean操作符做真值测试实例
2015/01/30 Python
Python的Flask框架标配模板引擎Jinja2的使用教程
2016/07/12 Python
Python脚本实现12306火车票查询系统
2016/09/30 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
2018/10/17 Python
python实现全排列代码(回溯、深度优先搜索)
2020/02/26 Python
Python TestSuite生成测试报告过程解析
2020/07/23 Python
Python grequests模块使用场景及代码实例
2020/08/10 Python
Python使用内置函数setattr设置对象的属性值
2020/10/16 Python
完美解决torch.cuda.is_available()一直返回False的玄学方法
2021/02/06 Python
Foreo国际站:Foreo International
2018/10/29 全球购物
意大利在线药房:shop-farmacia.it
2019/03/12 全球购物
时尚、社区、科技:SEVENSTORE
2019/04/26 全球购物
本科毕业生的求职信范文
2013/11/20 职场文书
高三高考决心书
2014/03/11 职场文书
2014年党员承诺书范文
2014/05/20 职场文书
学校光盘行动倡议书
2015/04/28 职场文书
python基础之类属性和实例属性
2021/10/24 Python