PHP操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)


Posted in PHP onNovember 10, 2011
<? 
/** 
* 操纵文件类 
* 
* 例子: 
* FileUtil::createDir('a/1/2/3'); 测试建立文件夹 建一个a/1/2/3文件夹 
* FileUtil::createFile('b/1/2/3'); 测试建立文件 在b/1/2/文件夹下面建一个3文件 
* FileUtil::createFile('b/1/2/3.exe'); 测试建立文件 在b/1/2/文件夹下面建一个3.exe文件 
* FileUtil::copyDir('b','d/e'); 测试复制文件夹 建立一个d/e文件夹,把b文件夹下的内容复制进去 
* FileUtil::copyFile('b/1/2/3.exe','b/b/3.exe'); 测试复制文件 建立一个b/b文件夹,并把b/1/2文件夹中的3.exe文件复制进去 
* FileUtil::moveDir('a/','b/c'); 测试移动文件夹 建立一个b/c文件夹,并把a文件夹下的内容移动进去,并删除a文件夹 
* FileUtil::moveFile('b/1/2/3.exe','b/d/3.exe'); 测试移动文件 建立一个b/d文件夹,并把b/1/2中的3.exe移动进去 
* FileUtil::unlinkFile('b/d/3.exe'); 测试删除文件 删除b/d/3.exe文件 
* FileUtil::unlinkDir('d'); 测试删除文件夹 删除d文件夹 
*/ 
class FileUtil { 
/** 
* 建立文件夹 
* 
* @param string $aimUrl 
* @return viod 
*/ 
function createDir($aimUrl) { 
$aimUrl = str_replace('', '/', $aimUrl); 
$aimDir = ''; 
$arr = explode('/', $aimUrl); 
foreach ($arr as $str) { 
$aimDir .= $str . '/'; 
if (!file_exists($aimDir)) { 
mkdir($aimDir); 
} 
} 
} 
/** 
* 建立文件 
* 
* @param string $aimUrl 
* @param boolean $overWrite 该参数控制是否覆盖原文件 
* @return boolean 
*/ 
function createFile($aimUrl, $overWrite = false) { 
if (file_exists($aimUrl) && $overWrite == false) { 
return false; 
} elseif (file_exists($aimUrl) && $overWrite == true) { 
FileUtil::unlinkFile($aimUrl); 
} 
$aimDir = dirname($aimUrl); 
FileUtil::createDir($aimDir); 
touch($aimUrl); 
return true; 
} 
/** 
* 移动文件夹 
* 
* @param string $oldDir 
* @param string $aimDir 
* @param boolean $overWrite 该参数控制是否覆盖原文件 
* @return boolean 
*/ 
function moveDir($oldDir, $aimDir, $overWrite = false) { 
$aimDir = str_replace('', '/', $aimDir); 
$aimDir = substr($aimDir, -1) == '/' ? $aimDir : $aimDir . '/'; 
$oldDir = str_replace('', '/', $oldDir); 
$oldDir = substr($oldDir, -1) == '/' ? $oldDir : $oldDir . '/'; 
if (!is_dir($oldDir)) { 
return false; 
} 
if (!file_exists($aimDir)) { 
FileUtil::createDir($aimDir); 
} 
@$dirHandle = opendir($oldDir); 
if (!$dirHandle) { 
return false; 
} 
while(false !== ($file = readdir($dirHandle))) { 
if ($file == '.' || $file == '..') { 
continue; 
} 
if (!is_dir($oldDir.$file)) { 
FileUtil::moveFile($oldDir . $file, $aimDir . $file, $overWrite); 
} else { 
FileUtil::moveDir($oldDir . $file, $aimDir . $file, $overWrite); 
} 
} 
closedir($dirHandle); 
return rmdir($oldDir); 
} 
/** 
* 移动文件 
* 
* @param string $fileUrl 
* @param string $aimUrl 
* @param boolean $overWrite 该参数控制是否覆盖原文件 
* @return boolean 
*/ 
function moveFile($fileUrl, $aimUrl, $overWrite = false) { 
if (!file_exists($fileUrl)) { 
return false; 
} 
if (file_exists($aimUrl) && $overWrite = false) { 
return false; 
} elseif (file_exists($aimUrl) && $overWrite = true) { 
FileUtil::unlinkFile($aimUrl); 
} 
$aimDir = dirname($aimUrl); 
FileUtil::createDir($aimDir); 
rename($fileUrl, $aimUrl); 
return true; 
} 
/** 
* 删除文件夹 
* 
* @param string $aimDir 
* @return boolean 
*/ 
function unlinkDir($aimDir) { 
$aimDir = str_replace('', '/', $aimDir); 
$aimDir = substr($aimDir, -1) == '/' ? $aimDir : $aimDir.'/'; 
if (!is_dir($aimDir)) { 
return false; 
} 
$dirHandle = opendir($aimDir); 
while(false !== ($file = readdir($dirHandle))) { 
if ($file == '.' || $file == '..') { 
continue; 
} 
if (!is_dir($aimDir.$file)) { 
FileUtil::unlinkFile($aimDir . $file); 
} else { 
FileUtil::unlinkDir($aimDir . $file); 
} 
} 
closedir($dirHandle); 
return rmdir($aimDir); 
} 
/** 
* 删除文件 
* 
* @param string $aimUrl 
* @return boolean 
*/ 
function unlinkFile($aimUrl) { 
if (file_exists($aimUrl)) { 
unlink($aimUrl); 
return true; 
} else { 
return false; 
} 
} 
/** 
* 复制文件夹 
* 
* @param string $oldDir 
* @param string $aimDir 
* @param boolean $overWrite 该参数控制是否覆盖原文件 
* @return boolean 
*/ 
function copyDir($oldDir, $aimDir, $overWrite = false) { 
$aimDir = str_replace('', '/', $aimDir); 
$aimDir = substr($aimDir, -1) == '/' ? $aimDir : $aimDir.'/'; 
$oldDir = str_replace('', '/', $oldDir); 
$oldDir = substr($oldDir, -1) == '/' ? $oldDir : $oldDir.'/'; 
if (!is_dir($oldDir)) { 
return false; 
} 
if (!file_exists($aimDir)) { 
FileUtil::createDir($aimDir); 
} 
$dirHandle = opendir($oldDir); 
while(false !== ($file = readdir($dirHandle))) { 
if ($file == '.' || $file == '..') { 
continue; 
} 
if (!is_dir($oldDir . $file)) { 
FileUtil::copyFile($oldDir . $file, $aimDir . $file, $overWrite); 
} else { 
FileUtil::copyDir($oldDir . $file, $aimDir . $file, $overWrite); 
} 
} 
return closedir($dirHandle); 
} 
/** 
* 复制文件 
* 
* @param string $fileUrl 
* @param string $aimUrl 
* @param boolean $overWrite 该参数控制是否覆盖原文件 
* @return boolean 
*/ 
function copyFile($fileUrl, $aimUrl, $overWrite = false) { 
if (!file_exists($fileUrl)) { 
return false; 
} 
if (file_exists($aimUrl) && $overWrite == false) { 
return false; 
} elseif (file_exists($aimUrl) && $overWrite == true) { 
FileUtil::unlinkFile($aimUrl); 
} 
$aimDir = dirname($aimUrl); 
FileUtil::createDir($aimDir); 
copy($fileUrl, $aimUrl); 
return true; 
} 
} 
?>

另一种调用方式:
$fu = new FileUtil(); 
$fu->copyFile('a/1/2/3', 'a/1/2/4');
PHP 相关文章推荐
如何利用php+mysql保存和输出文件
Oct 09 PHP
php自动适应范围的分页代码
Aug 05 PHP
PHP性能优化 产生高度优化代码
Jul 22 PHP
很让人受教的 提高php代码质量36计
Sep 05 PHP
php获取ip的三个属性区别介绍(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
Sep 23 PHP
浅析PHP程序防止ddos,dns,集群服务器攻击的解决办法
Jun 18 PHP
浅析php适配器模式(Adapter)
Nov 25 PHP
Zend Framework上传文件重命名的实现方法
Nov 25 PHP
让ThinkPHP的模板引擎达到最佳效率的方法详解
Mar 14 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
Dec 21 PHP
Laravel 5+ .env环境配置文件详解
Apr 06 PHP
一文搞懂PHP中的抽象类和接口
May 25 PHP
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
Nov 10 #PHP
PHP mb_convert_encoding文字编码的转换函数介绍
Nov 10 #PHP
PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
Nov 10 #PHP
PHP中其实也可以用方法链
Nov 10 #PHP
PHP容易被忽略而出错陷阱 数字与字符串比较
Nov 10 #PHP
PHP及Zend Engine的线程安全模型分析
Nov 10 #PHP
PHP 多维数组的排序问题 根据二维数组中某个项排序
Nov 09 #PHP
You might like
PHP 登录完成后如何跳转上一访问页面
2014/01/14 PHP
php提示Warning:mysql_fetch_array() expects的解决方法
2014/12/16 PHP
支持png透明图片的php生成缩略图类分享
2015/02/08 PHP
PHP遍历数组的方法汇总
2015/04/30 PHP
关于php中一些字符串总结
2016/05/05 PHP
纯CSS3实现质感细腻丝滑按钮
2021/03/09 HTML / CSS
jqgrid 简单学习笔记
2011/05/03 Javascript
js判断上传文件类型判断FileUpload文件类型代码
2014/05/20 Javascript
JavaScript检测浏览器cookie是否已经启动的方法
2015/02/27 Javascript
javascript实现网页中涉及的简易运动(改变宽高、透明度、位置)
2015/11/29 Javascript
jQuery控制li上下循环滚动插件用法实例(附demo源码下载)
2016/05/28 Javascript
js实现四舍五入完全保留两位小数的方法
2016/08/02 Javascript
JS匿名函数类生成方式实例分析
2016/11/26 Javascript
vue-router实现webApp切换页面动画效果代码
2017/05/25 Javascript
JavaScript字符串_动力节点Java学院整理
2017/06/27 Javascript
vue绑定设置属性的多种方式(5)
2017/08/16 Javascript
使用Vue完成一个简单的todolist的方法
2017/12/01 Javascript
js删除对象/数组中null、undefined、空对象及空数组方法示例
2018/11/14 Javascript
jquery ajax 请求小技巧实例分析
2019/11/11 jQuery
Vue.js 实现地址管理页面思路详解(地址添加、编辑、删除和设置默认地址)
2019/12/11 Javascript
[44:33]EG vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
为什么从Python 3.6开始字典有序并效率更高
2019/07/15 Python
paramiko使用tail实时获取服务器的日志输出详解
2020/12/06 Python
HTML5在微信内置浏览器下右上角菜单的调整字体导致页面显示错乱的问题
2021/01/19 HTML / CSS
新西兰最大的在线设计师眼镜店:SmartBuyGlasses新西兰
2017/10/20 全球购物
BNKR中国官网:带你感受澳洲领先潮流时尚
2018/08/21 全球购物
Foot Locker英国官网:美国知名运动产品零售商
2019/02/21 全球购物
法律专业自我鉴定
2013/10/03 职场文书
搞笑创意广告语
2014/03/17 职场文书
酒店总经理岗位职责
2014/03/17 职场文书
导航工程专业自荐信
2014/09/02 职场文书
2015年幼儿园中班工作总结
2015/04/25 职场文书
电视新闻稿
2015/07/17 职场文书
先进工作者主要事迹材料
2015/11/03 职场文书
一文了解MySQL二级索引的查询过程
2022/02/24 MySQL
python超详细实现完整学生成绩管理系统
2022/03/17 Python