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中时间轴开发(刚刚、5分钟前、昨天10:23等)
Oct 03 PHP
php 文本文件的读取效率
Feb 10 PHP
MySQL时间字段究竟使用INT还是DateTime的说明
Feb 27 PHP
关于PHP的相似度计算函数:levenshtein的使用介绍
Apr 15 PHP
浅析使用Turck-mmcache编译来加速、优化PHP代码
Jun 20 PHP
php使用fputcsv()函数csv文件读写数据的方法
Jan 06 PHP
CI框架扩展系统核心类的方法分析
May 23 PHP
PHP正则表达式匹配替换与分割功能实例浅析
Feb 04 PHP
PHP安装memcache扩展的步骤讲解
Feb 14 PHP
Codeigniter里的无刷新上传的实现代码
Apr 14 PHP
Yii2框架配置文件(Application属性)与调试技巧实例分析
May 27 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
Oct 16 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中文乱码怎么办如何让浏览器自动识别utf-8
2014/01/15 PHP
php实例分享之二维数组排序
2014/05/15 PHP
php导出CSV抽象类实例
2014/09/24 PHP
Thinkphp关闭缓存的方法
2015/06/26 PHP
php安装dblib扩展,连接mssql的具体步骤
2017/03/02 PHP
js 页面执行时间计算代码
2009/03/04 Javascript
js AspxButton的客户端操作
2009/06/26 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
2013/10/15 Javascript
分享Javascript中最常用的55个经典小技巧
2013/11/29 Javascript
JavaScript实现找出字符串中第一个不重复的字符
2014/09/03 Javascript
js实现横向伸展开的二级导航菜单代码
2015/08/28 Javascript
jquery插件Jplayer使用方法简析
2016/04/22 Javascript
基于Cookie常用操作以及属性介绍
2017/09/07 Javascript
微信小程序日期时间选择器使用方法
2018/02/01 Javascript
JavaScript两种计时器的实例讲解
2019/01/31 Javascript
vue踩坑记-在项目中安装依赖模块npm install报错
2019/04/02 Javascript
vue实现日历备忘录功能
2020/09/24 Javascript
[01:05:12]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS CIS-GAME
2014/05/21 DOTA
在Python中操作列表之List.append()方法的使用
2015/05/20 Python
Python外星人入侵游戏编程完整版
2020/03/30 Python
利用python编写一个图片主色转换的脚本
2017/12/07 Python
Python 实现一行输入多个值的方法
2018/04/21 Python
Python实现的NN神经网络算法完整示例
2018/06/19 Python
Python编程图形库之Pillow使用方法讲解
2018/12/28 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
2019/06/17 Python
用Python实现最速下降法求极值的方法
2019/07/10 Python
Python模块的定义,模块的导入,__name__用法实例分析
2020/01/07 Python
python爬虫调度器用法及实例代码
2020/11/30 Python
英国领先的隐形眼镜在线供应商:Lenstore.co.uk
2019/11/24 全球购物
如何进行有效的自我评价
2013/09/27 职场文书
社区八一活动方案
2014/02/03 职场文书
《我的第一本书》教学反思
2014/02/15 职场文书
卖房授权委托书样本
2014/10/05 职场文书
教师廉洁自律个人总结
2015/02/10 职场文书
《只有一个地球》教学反思
2016/02/16 职场文书
聊聊Python中关于a=[[]]*3的反思
2021/06/02 Python