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 相关文章推荐
E路文章系统PHP
Dec 11 PHP
php mssql 日期出现中文字符的解决方法
Mar 10 PHP
利用php绘制饼状图的实现代码
Jun 07 PHP
浅谈PHP中output_buffering
Jul 13 PHP
php上传图片生成缩略图(GD库)
Jan 06 PHP
浅析Yii2缓存的使用
May 10 PHP
php格式化时间戳
Dec 17 PHP
Yii2 加载css、js 载静态资源的方法
Mar 10 PHP
php生成毫秒时间戳的实例讲解
Sep 22 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
Oct 07 PHP
PHP+jQuery实现即点即改功能示例
Feb 21 PHP
Thinkphp 框架基础之入口文件功能、定义与用法分析
Apr 27 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
用 PHP5 轻松解析 XML
2006/12/04 PHP
PHP显示今天、今月、上月、今年的起点/终点时间戳的代码
2011/05/25 PHP
Symfony2创建页面实例详解
2016/03/18 PHP
做网页的一些技巧
2007/02/01 Javascript
让 JavaScript 轻松支持函数重载 (Part 2 - 实现)
2009/08/04 Javascript
如何在MVC应用程序中使用Jquery
2014/11/17 Javascript
3种Jquery限制文本框只能输入数字字母的方法
2014/12/03 Javascript
JS跨域交互(jQuery+php)之jsonp使用心得
2016/07/01 Javascript
AngularJs bootstrap搭载前台框架——js控制部分
2016/09/01 Javascript
Node.js如何响应Ajax的POST请求并且保存为JSON文件详解
2017/03/10 Javascript
Vue子组件向父组件通信与父组件调用子组件中的方法
2018/06/22 Javascript
Vue高版本中一些新特性的使用详解
2018/09/25 Javascript
webpack4 从零学习常用配置(小结)
2019/05/28 Javascript
layui table单元格事件修改值的方法
2019/09/24 Javascript
VUE.js实现动态设置输入框disabled属性
2019/10/28 Javascript
[46:43]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第二局
2016/03/02 DOTA
[02:19]DOTA选手解说齐贺岁
2018/02/11 DOTA
django定期执行任务(实例讲解)
2017/11/03 Python
python 列表输出重复值以及对应的角标方法
2019/06/11 Python
PyQt5响应回车事件的方法
2019/06/25 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
2019/07/01 Python
Django 项目重命名的实现步骤解析
2019/08/14 Python
python实现最大优先队列
2019/08/29 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
如何利用python发送邮件
2020/09/26 Python
详解webapp页面滚动卡顿的解决办法
2018/12/26 HTML / CSS
阿迪达斯芬兰官方网站:adidas芬兰
2017/01/30 全球购物
什么是设计模式
2012/06/17 面试题
农田水利实习自我鉴定
2013/09/19 职场文书
户籍证明的格式
2014/01/13 职场文书
人力管理专业毕业生求职信
2014/02/27 职场文书
工程管理英文求职信
2014/03/18 职场文书
信用卡逾期证明示例
2014/09/13 职场文书
庆祝三八妇女节标语
2014/10/09 职场文书
求职简历自荐信怎么写
2015/03/26 职场文书
身份证丢失证明
2015/06/19 职场文书