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变量引用的面试题
Aug 08 PHP
php Smarty 字符比较代码
Feb 27 PHP
PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
Nov 10 PHP
PHP中函数rand和mt_rand的区别比较
Dec 26 PHP
php中定时计划任务的实现原理
Jan 08 PHP
php判断是否为json格式的方法
Mar 04 PHP
培养自己的php编码规范
Sep 28 PHP
PHP图像裁剪缩略裁切类源码及使用方法
Jan 07 PHP
用PHP的socket实现客户端到服务端的通信实例详解
Feb 04 PHP
PHP实现求解最长公共子串问题的方法
Nov 17 PHP
PHP实现的XXTEA加密解密算法示例
Aug 28 PHP
YII框架页面缓存操作示例
Apr 29 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
在PHP3中实现SESSION的功能(三)
2006/10/09 PHP
PHP连接SQLSERVER 注意事项(附dll文件下载)
2012/06/28 PHP
ThinkPHP处理Ajax返回的方法
2014/11/22 PHP
php mysql操作mysql_connect连接数据库实例详解
2016/12/26 PHP
Jquery 基础学习笔记
2009/05/29 Javascript
struts2 jquery 打造无限层次的树
2009/10/23 Javascript
JavaScript对象之间的转换 jQuery对象和原声DOM
2011/03/07 Javascript
JavaScript获取/更改文本框的值的实例代码
2013/08/02 Javascript
JS实现定时页面弹出类似QQ新闻的提示框
2013/11/07 Javascript
Jquery 获取指定标签的对象及属性的设置与移除
2014/05/29 Javascript
使用jquery.validate自定义方法实现&quot;手机号码或者固话至少填写一个&quot;的逻辑验证
2014/09/01 Javascript
JavaScript随机生成信用卡卡号的方法
2015/04/07 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
2016/05/27 Javascript
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
2017/04/14 jQuery
get  post jsonp三种数据交互形式实例详解
2017/08/25 Javascript
layui 实现二级弹窗弹出之后 关闭一级弹窗的方法
2019/09/18 Javascript
Jquery使用each函数实现遍历及数组处理
2020/07/14 jQuery
Python的面向对象编程方式学习笔记
2016/07/12 Python
python 把数据 json格式输出的实例代码
2016/10/31 Python
Python正则表达式分组概念与用法详解
2017/06/24 Python
Python实现简易Web爬虫详解
2018/01/03 Python
python 的topk算法实例
2020/04/02 Python
对Keras中predict()方法和predict_classes()方法的区别说明
2020/06/09 Python
Python模块zipfile原理及使用方法详解
2020/08/04 Python
Anaconda的安装与虚拟环境建立
2020/11/18 Python
Notino法国:购买香水和化妆品
2019/04/15 全球购物
俄罗斯小米家用电器、电子产品和智能家居商店:Poood.ru
2020/04/03 全球购物
PHP两种查询函数array/row的区别
2013/06/03 面试题
少年闰土教学反思
2014/02/22 职场文书
国贸专业毕业求职信
2014/06/11 职场文书
美术第二课堂活动总结
2014/07/08 职场文书
2015年营销工作总结范文
2015/04/23 职场文书
Go Gin实现文件上传下载的示例代码
2021/04/02 Golang
一起来学习Python的元组和列表
2022/03/13 Python
Vue 打包后相对路径的引用问题
2022/06/05 Vue.js
纯CSS打字动画的实现示例
2022/08/05 HTML / CSS