php实现复制移动文件的方法


Posted in PHP onJuly 29, 2015

本文实例讲述了php实现复制移动文件的方法。分享给大家供大家参考。具体如下:

仿写elFinder的,抽出关键的成员方法做的一个简单示例

实现功能是:

实现多文件复制或移动操作

注:为了方便测试,对一些判断做了简单处理。并且会在程序文件所在目录下
新生成一个test文件夹作为目的文件夹。如果实际使用需要修改。
     
copy.php文件如下:

<?php
/**
 * 复制/移动操作简单示例 : >PHP5
 *
 */
/**
 * 判断文件是否存在
 *
 */
function _isFind($filename) {
  return @file_exists($filename);
}
/**
 * 判断文件夹是否存在? 简单处理: 仅对根目录进行判断
 *
 */
function _isFindDir($dir) {
  $ls = scandir(dirname(__FILE__));
  foreach ($ls as $val) {
    if ($val == $dir) return TRUE;
  }
  return FALSE;
}
/**
 * 复制或移动
 *
 * @param  array  源文件夹数组: 简单处理:采用文件名作为元素值
 * @param  string 目的文件夹
 * @param  string 操作数: move - 移动 ; copy - 复制
 * @return bool
 */
function _copy_move($src = array(), $dst = '', $op = 'move') {
  if ( ! is_array($src)) {
    $src = array($src);
  }
  //判断源文件是否存在?
  foreach ($src as $val) {
    if ( _isFind($val) === FALSE) {
      return _log('Src file not find', $val);
    }
  }
  //判断目的文件夹是否存在? 如果不存在就生成
  //简单处理: 实际应用需要修改
  if (_isFindDir($dst) === FALSE) {
    @mkdir($dst);
  }
  //执行移动或复制操作
  foreach ($src as $val) {
    $_dst = $dst.'/'.basename($val);
    //判断目的文件是否存在? 存在不允许进行操作
    if (_isFind($_dst) === TRUE) {
      return _log('Dst file is exists', $dst);
    } else if (strpos($dst, $val) === 0) {
      return _log('Unable to copy/move into itself');
    }
    if (strtolower($op) === 'move') {      
      if ( ! rename($val, $_dst)) {
        return _log('Unable to move files', $val);
      } 
    } else if (strtolower($op) === 'copy') {
      if ( ! _copy($val, $_dst)) {
        return _log('Unable to copy files', $val);
      }
    }
  }
  return 'Success!';
}
/**
 * 复制操作 
 *
 */
function _copy($src, $dst) {
  if ( ! is_dir($src)) {
    if ( ! copy($src, $dst)) {
      return _log('Unable to copy files', $src);
    }
  } else {
    mkdir($dst);
    $ls = scandir($src);
    for ($i = 0; $i < count($ls); $i++) { 
      if ($ls[$i] == '.' OR $ls[$i] == '..') continue;
      $_src = $src.'/'.$ls[$i];
      $_dst = $dst.'/'.$ls[$i];
      if ( is_dir($_src)) {
        if ( ! _copy($_src, $_dst)) {
          return _log('Unable to copy files', $_src);
        }
      } else {
        if ( ! copy($_src, $_dst)) {
          return _log('Unable to copy files', $_src);
        }
      }
    }
  }
  return TRUE;
}
/**
 * 日志记录
 *
 */
function _log($msg, $arg = '') {
  if ($arg != '') {
    $msg = "date[".date('Y-m-d H:i:s')."]\tmsg[".$msg."]\targ[".$arg."]\n";
  } else {
    $msg = "date[".date('Y-m-d H:i:s')."]\tmsg[".$msg."]\n";
  }
  echo $msg;
  return @file_put_contents('copy.log', $msg, FILE_APPEND);
} 
/**
 * 示例
 * 1. 需要修改$src的数组参数 ; 2. 可以修改_copy_move的第三个参数以分别测试move/copy操作
 *
 */
$src = array('img', 'min', 'phpinfo.php');
$dst = 'test';
var_dump(_copy_move($src, $dst, 'copy'));
/*end of php*/

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
把从SQL中取出的数据转化成XMl格式
Oct 09 PHP
自动跳转中英文页面
Oct 09 PHP
PHP 字符串编码截取函数(兼容utf-8和gb2312)
May 02 PHP
ie6 动态缩略图不显示的原因
Jun 21 PHP
PHP通用检测函数集合
Feb 08 PHP
MySQL的FIND_IN_SET函数使用方法分享
Mar 27 PHP
学习php过程中的一些注意点的总结
Oct 25 PHP
详细解读PHP中接口的应用
Aug 12 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
Nov 25 PHP
对于Laravel 5.5核心架构的深入理解
Feb 22 PHP
Laravel数据库读写分离配置的方法
Oct 13 PHP
PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
Apr 26 PHP
详解PHP中的Traits
Jul 29 #PHP
php实现在多维数组中查找特定value的方法
Jul 29 #PHP
1亿条数据如何分表100张到Mysql数据库中(PHP)
Jul 29 #PHP
php实现仿写CodeIgniter的购物车类
Jul 29 #PHP
PHP使用逆波兰式计算工资的方法
Jul 29 #PHP
ThinkPHP实现递归无级分类――代码少
Jul 29 #PHP
PHP之正则表达式捕获组与非捕获组(详解)
Jul 29 #PHP
You might like
用php写的serv-u的web申请账号的程序
2006/10/09 PHP
简单的pgsql pdo php操作类实现代码
2016/08/25 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
ThinkPHP5.0框架实现切换数据库的方法分析
2019/10/30 PHP
三级下拉菜单的js实现代码
2011/05/23 Javascript
JQuery在页面中添加和除移DOM示例代码
2013/06/24 Javascript
js创建对象几种方式的优缺点对比
2016/09/28 Javascript
JS对大量数据进行多重过滤的方法
2016/11/04 Javascript
为输入框加入数字js校验代码分享
2017/11/02 Javascript
webpack组织模块打包Library的原理及实现
2018/03/10 Javascript
微信小程序基础教程之worker线程的使用方法
2019/07/15 Javascript
Layui实现主窗口和Iframe层参数传递
2019/11/14 Javascript
解决vuecli3中img src 的引入问题
2020/08/04 Javascript
python使用paramiko模块实现ssh远程登陆上传文件并执行
2014/01/27 Python
Python中的类学习笔记
2014/09/23 Python
Python中zfill()方法的使用教程
2015/05/20 Python
浅谈插入排序算法在Python程序中的实现及简单改进
2016/05/04 Python
Python运行报错UnicodeDecodeError的解决方法
2016/06/07 Python
python操作MySQL 模拟简单银行转账操作
2017/09/27 Python
python实现nao机器人身体躯干和腿部动作操作
2019/04/29 Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
2019/08/17 Python
python中的测试框架
2020/11/13 Python
css3使网页、图片变成灰色兼容大多数浏览器
2014/07/02 HTML / CSS
HTML5 Blob对象的具体使用
2020/05/22 HTML / CSS
英国最大的女士服装零售商:Bonmarché
2017/08/17 全球购物
PHP如何去执行一个SQL语句
2016/03/05 面试题
外贸学院会计专业应届生求职信
2013/11/14 职场文书
自动化专业个人求职信范文
2013/12/30 职场文书
《值日生》教学反思
2014/02/17 职场文书
警校毕业生自我评价
2014/04/06 职场文书
学习考察心得体会
2014/09/04 职场文书
领导班子四风问题个人对照检查材料
2014/10/04 职场文书
2016感恩母亲节校园广播稿
2015/12/17 职场文书
Python Django模型详解
2021/10/05 Python
Python自动化工具之实现Excel转Markdown表格
2022/04/08 Python
nginx搭建NFS网络文件系统
2022/04/14 Servers