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新手上路(三)
Oct 09 PHP
php环境配置 php5 mysql5 apache2 phpmyadmin安装与配置
Nov 17 PHP
php 数组的创建、调用和更新实现代码
Mar 09 PHP
PHP5与MySQL数据库操作常用代码 收集
Mar 21 PHP
PHP企业级应用之常见缓存技术篇
Jan 27 PHP
关于js与php互相传值的介绍
Jun 25 PHP
PHP用strstr()函数阻止垃圾评论(通过判断a标记)
Sep 28 PHP
帝国CMS留言板回复后发送EMAIL通知客户
Jul 06 PHP
PHP7之Mongodb API使用详解
Dec 26 PHP
Json_encode防止汉字转义成unicode的方法
Feb 25 PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
Apr 09 PHP
PHP 构造函数和析构函数原理与用法分析
Apr 21 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贪婪算法解决0-1背包问题实例分析
2015/03/23 PHP
PHP实现非阻塞模式的方法分析
2018/07/26 PHP
PHP将整数数字转换为罗马数字实例分享
2019/03/17 PHP
PHP实现获取url地址中顶级域名的方法示例
2019/06/05 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
2020/03/27 PHP
js中格式化日期时间型数据函数代码
2010/11/08 Javascript
js网页实时倒计时精确到秒级
2014/02/10 Javascript
JavaScript列表框listbox全选和反选的实现方法
2015/03/18 Javascript
使用JQuery实现Ctrl+Enter提交表单的方法
2015/10/22 Javascript
js一维数组、多维数组和对象的混合使用方法
2016/04/03 Javascript
js计算时间差代码【包括计算,天,时,分,秒】
2016/04/26 Javascript
Vue.js系列之项目结构说明(2)
2017/01/03 Javascript
Angular 2父子组件数据传递之@Input和@Output详解(下)
2017/07/05 Javascript
angularjs2 ng2 密码隐藏显示的实例代码
2017/08/01 Javascript
js数组实现权重概率分配
2017/09/12 Javascript
详解JS构造函数中this和return
2017/09/16 Javascript
Angular实现类似博客评论的递归显示及获取回复评论的数据
2017/11/06 Javascript
Vue.js 踩坑记之双向绑定
2018/05/03 Javascript
JS继承实现方法及优缺点详解
2020/09/02 Javascript
[02:30]DOTA2放量测试专访海涛:呼吁保护新手玩家
2013/08/26 DOTA
[06:44]2014DOTA2国际邀请赛-钥匙体育馆开战 开幕式振奋人心
2014/07/19 DOTA
linux系统使用python获取cpu信息脚本分享
2014/01/15 Python
在Python的Flask框架下使用sqlalchemy库的简单教程
2015/04/09 Python
解决Python requests 报错方法集锦
2017/03/19 Python
用Python一键搭建Http服务器的方法
2018/06/01 Python
利用python-docx模块写批量生日邀请函
2019/08/26 Python
Python实现多线程下载脚本的示例代码
2020/04/03 Python
python opencv把一张图片嵌入(叠加)到另一张图片上的实现代码
2020/06/11 Python
python cv2.resize函数high和width注意事项说明
2020/07/05 Python
简单的HTML5初步入门教程
2015/09/29 HTML / CSS
关于老式浏览器兼容HTML5和CSS3的问题
2016/06/01 HTML / CSS
Clarks鞋美国官网:全球领军鞋履品牌
2017/05/13 全球购物
什么是测试驱动开发(TDD)
2012/02/15 面试题
欠款证明
2015/06/24 职场文书
七年级之家长会发言稿范文
2019/09/04 职场文书
CSS实现背景图片全屏铺满自适应的3种方式
2022/07/07 HTML / CSS