复制移动文件 - PHP

轻婷小哥_6430

轻婷小哥_6430

2016-11-09

1528人浏览

原创

仿写elfinder的,抽出关键的成员方法做的一个简单示例
实现功能是:
实现多文件复制或移动操作

注:为了方便测试,对一些判断做了简单处理。并且会在程序文件所在目录下
      新生成一个test文件夹作为目的文件夹。如果实际使用需要修改。

<?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 <p><br></p><div class="aritcle_card flexRow artxards">
											<div class="artcardd flexRow">
												<a class="aritcle_card_img" rel="nofollow" href="/ai/1750" title="AVCLabs"><img
														src="https://img.php.cn/upload/ai_manual/000/969/633/68b6d027982ef897.png" alt="AVCLabs" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
												<div class="aritcle_card_info flexColumn">
													<a rel="nofollow" href="/ai/1750" title="AVCLabs" class="overflowclass">AVCLabs</a>
													<p class="overflowclass">一款集AI视频处理与增强能力于一体的工具平台,提供背景移除、画面处理和视频优化等功能,适合日常后期制作。</p>
												</div>
												<a rel="nofollow" href="/ai/1750" title="AVCLabs" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
												</a>
											</div>
										</div>

php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

2026.10.28

60

16

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

2026.10.28

40

15

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

2026.10.28

120

10

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

140

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

120

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

80

15

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

2026.10.22

40

10

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

2026.10.22

80

25

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

2026.10.22

40

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CSS 代码实例
CSS 代码实例

共45课时 | 20.1万人学习