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 相关文章推荐
php实现从ftp服务器上下载文件树到本地电脑的程序
Feb 10 PHP
php while循环得到循环次数
Oct 26 PHP
PHP判断文章里是否有图片的简单方法
Jul 26 PHP
php实现mysql数据库分表分段备份
Jun 18 PHP
64位windows系统下安装Memcache缓存
Dec 06 PHP
php实现带读写分离功能的MySQL类完整实例
Jul 28 PHP
PHP简单判断手机设备的方法
Aug 23 PHP
php实现文章置顶功能的方法
Oct 20 PHP
php基于PDO实现功能强大的MYSQL封装类实例
Feb 27 PHP
PHP-FPM的配置与优化讲解
Mar 15 PHP
解决Laravel5.2 Auth认证退出失效的问题
Oct 14 PHP
php计数排序算法的实现代码(附四个实例代码)
Mar 31 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获取网卡地址的代码
2008/04/09 PHP
探讨php define()函数及defined()函数使用详解
2013/06/09 PHP
解析mysql left( right ) join使用on与where筛选的差异
2013/06/18 PHP
php中数字、字符与对象判断函数用法实例
2014/11/26 PHP
PHP获取当前所在目录位置的方法
2014/11/26 PHP
PHP根据图片色界在不同位置加水印的方法
2015/07/01 PHP
php 根据自增id创建唯一编号类
2017/04/06 PHP
php实现算术验证码功能
2018/12/05 PHP
ThinkPHP中图片按比例切割的代码实例
2019/03/08 PHP
PHP终止脚本运行三种实现方法详解
2020/09/01 PHP
jQuery动态显示和隐藏datagrid中的某一列的方法
2013/12/11 Javascript
Javascript前端UI框架Kit使用指南之kitjs的对话框组件
2014/11/28 Javascript
JavaScript学习笔记之JS对象
2015/01/22 Javascript
jQuery中大家不太了解的几个方法
2015/03/04 Javascript
javascript判断数组内是否重复的方法
2015/04/21 Javascript
JS动态创建DOM元素的方法
2015/06/09 Javascript
使用javascript将时间转换成今天,昨天,前天等格式
2015/06/25 Javascript
Javascript removeChild()删除节点及删除子节点的方法
2015/12/27 Javascript
微信小程序之小豆瓣图书实例
2016/11/30 Javascript
vuejs2.0实现分页组件使用$emit进行事件监听数据传递的方法
2017/02/22 Javascript
js微信应用场景之微信音乐相册案例分享
2017/08/11 Javascript
AngularJS 控制器 controller的详解
2017/10/17 Javascript
Vue2.0实现组件数据的双向绑定问题
2018/03/06 Javascript
总结4个方面优化Vue项目
2019/02/11 Javascript
原生js实现随机点名
2020/07/05 Javascript
浅谈python import引入不同路径下的模块
2017/07/11 Python
Python中的异常处理try/except/finally/raise用法分析
2019/02/28 Python
基于Python的PIL库学习详解
2019/05/10 Python
python实现五子棋游戏
2019/06/18 Python
django foreignkey外键使用的例子 相当于left join
2019/08/06 Python
HTML中meta标签及Keywords
2020/04/15 HTML / CSS
Skyscanner澳大利亚:全球领先的旅游搜索网站
2018/03/24 全球购物
说说你所熟悉或听说过的j2ee中的几种常用模式?及对设计模式的一些看法
2012/05/24 面试题
平安家庭示范户事迹
2014/06/02 职场文书
2015年维修电工工作总结
2015/04/25 职场文书
2016应届毕业生就业指导课心得体会
2016/01/15 职场文书