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.NET的入门教程
Oct 09 PHP
PHP 编写的 25个游戏脚本
May 11 PHP
php编程实现获取excel文档内容的代码实例
Jun 28 PHP
10个实用的PHP代码片段
Sep 02 PHP
php json_encode奇怪问题说明
Sep 27 PHP
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
Jun 26 PHP
php将session放入memcached的设置方法
Feb 14 PHP
使用PHPMailer实现邮件发送代码分享
Oct 23 PHP
PHP打开和关闭文件操作函数总结
Nov 18 PHP
php利用smtp类实现电子邮件发送
Oct 30 PHP
thinkPHP5.1框架路由::get、post请求简单用法示例
May 06 PHP
Laravel 自带的Auth验证登录方法
Sep 30 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
一个图形显示IP的PHP程序代码
2007/10/19 PHP
PHP集成百度Ueditor 1.4.3
2014/11/23 PHP
PHP+Mysql+jQuery实现发布微博程序 php篇
2015/10/15 PHP
laravel 实现根据字段不同值做不同查询
2019/10/23 PHP
PHP isset empty函数相关面试题及解析
2020/12/11 PHP
CL vs ForZe BO5 第二场 2.13
2021/03/10 DOTA
Jquery 实现grid绑定模板
2015/01/28 Javascript
Javascript数据结构与算法之列表详解
2015/03/12 Javascript
jQuery on()方法使用技巧详解
2015/04/16 Javascript
JQuery实现的图文自动轮播效果插件
2015/06/19 Javascript
javascript创建cookie、读取cookie
2016/03/31 Javascript
深入理解JavaScript函数参数(推荐)
2016/07/26 Javascript
详解Javascript获取缓存和清除缓存API
2017/05/25 Javascript
使用JavaScript进行表单校验功能
2017/08/01 Javascript
vue 1.x 交互实现仿百度下拉列表示例
2017/10/21 Javascript
vue watch监听对象及对应值的变化详解
2018/02/24 Javascript
nuxt中使用路由守卫的方法步骤
2019/01/27 Javascript
JS双向链表实现与使用方法示例(增加一个previous属性实现)
2019/01/31 Javascript
Python CSV模块使用实例
2015/04/09 Python
python制作爬虫爬取京东商品评论教程
2016/12/16 Python
JS设计模式之责任链模式实例详解
2018/02/03 Python
python中的插值 scipy-interp的实现代码
2018/07/23 Python
使用python3实现操作串口详解
2019/01/01 Python
Python实现的文轩网爬虫完整示例
2019/05/16 Python
用Q-learning算法实现自动走迷宫机器人的方法示例
2019/06/03 Python
Python中模块(Module)和包(Package)的区别详解
2019/08/07 Python
简单介绍python封装的基本知识
2019/08/10 Python
python上下文管理的使用场景实例讲解
2021/03/03 Python
详解使用postMessage解决iframe跨域通信问题
2019/11/01 HTML / CSS
Spartoo西班牙官网:法国时尚购物网站
2018/03/27 全球购物
杭州SQL浙江浙大网新恩普软件有限公司
2013/07/27 面试题
保护环境倡议书
2014/04/14 职场文书
“四风”问题的主要表现和危害思想汇报
2014/09/19 职场文书
Python包管理工具pip的15 个使用小技巧
2021/05/17 Python
Linux、ubuntu系统下查看显卡型号、显卡信息详解
2022/04/07 Servers
ubuntu开机后ROS程序自启动问题
2022/12/24 Servers