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 相关文章推荐
如何利用php+mysql保存和输出文件
Oct 09 PHP
PHP详细彻底学习Smarty
Mar 27 PHP
PHP闭包(Closure)使用详解
May 02 PHP
php中并发读写文件冲突的解决方案
Oct 25 PHP
根据中文裁减字符串函数的php代码
Dec 03 PHP
PHP原生函数一定好吗?
Dec 08 PHP
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
Oct 23 PHP
Zend Framework框架中实现Ajax的方法示例
Jun 27 PHP
基于php数组中的索引数组和关联数组详解
Mar 12 PHP
PHP多维数组指定多字段排序的示例代码
May 16 PHP
PHPUnit测试私有属性和方法功能示例
Jun 12 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
Nov 19 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
11个PHP 分页脚本推荐
2011/08/15 PHP
修改WordPress中文章编辑器的样式的方法详解
2015/12/15 PHP
PHP使用反射机制实现查找类和方法的所在位置
2016/04/22 PHP
PHP设计模式之装饰器模式定义与用法详解
2018/04/02 PHP
24款非常有用的 jQuery 插件分享
2011/04/06 Javascript
JQuery实现简单验证码提示解决方案
2012/12/20 Javascript
JSON序列化与解析原生JS方法且IE6和chrome测试通过
2013/09/05 Javascript
深入理解JavaScript高级之词法作用域和作用域链
2013/12/10 Javascript
JS+CSS实现分类动态选择及移动功能效果代码
2015/10/19 Javascript
Highcharts学习之数据列
2016/08/03 Javascript
BootStrap入门教程(一)之可视化布局
2016/09/19 Javascript
判断div滑动到底部的scroll实例代码
2017/11/15 Javascript
vue-cli 3.x配置跨域代理的实现方法
2019/04/12 Javascript
Vue项目中使用jsonp抓取跨域数据的方法
2019/11/10 Javascript
微信小程序canvas开发水果老虎机的思路详解
2020/02/07 Javascript
解决Vue中的生命周期beforeDestory不触发的问题
2020/07/21 Javascript
JS时间戳与日期格式互相转换的简单方法示例
2021/01/30 Javascript
[00:23]DOTA2群星共贺开放测试 25日无码时代来袭
2013/09/23 DOTA
[03:10]2014DOTA2 TI马来劲旅Titan首战告捷目标只是8强
2014/07/10 DOTA
[11:33]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第二场
2018/04/06 DOTA
Python列表(list)常用操作方法小结
2015/02/02 Python
使用Python抓取模板之家的CSS模板
2015/03/16 Python
Python中str.format()详解
2017/03/12 Python
Python爬虫框架Scrapy实例代码
2018/03/04 Python
matplotlib.pyplot画图 图片的二进制流的获取方法
2018/05/24 Python
python斐波那契数列的计算方法
2018/09/27 Python
Python自省及反射原理实例详解
2020/07/06 Python
PyQt实现计数器的方法示例
2021/01/18 Python
解决python的空格和tab混淆而报错的问题
2021/02/26 Python
css3中背景尺寸background-size详解
2014/09/02 HTML / CSS
Html5大文件断点续传实现方法
2015/12/05 HTML / CSS
LocalStorage记住用户和密码功能
2017/07/24 HTML / CSS
思想道德自我评价2015
2015/03/09 职场文书
2019教师的学习计划
2019/06/25 职场文书
python 对图片进行简单的处理
2021/06/23 Python
JavaScript流程控制(分支)
2021/12/06 Javascript