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树的代码,可以嵌套任意层
Oct 09 PHP
PHP生成便于打印的网页
Oct 09 PHP
PHP 生成的XML以FLASH获取为乱码终极解决
Aug 07 PHP
QueryPath PHP 中的jQuery
Apr 11 PHP
php获取post中的json数据的实现方法
Jun 08 PHP
PHP警告Cannot use a scalar value as an array的解决方法
Jan 11 PHP
php笔记之:数据类型与常量的使用分析
May 14 PHP
深入解析fsockopen与pfsockopen的区别
Jul 05 PHP
PHP Curl多线程原理实例详解
Nov 06 PHP
ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整
Nov 05 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
Mar 28 PHP
PHP实现负载均衡session共享redis缓存操作示例
Aug 22 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 调用远程url的六种方法小结
2009/11/02 PHP
php 正确解码javascript中通过escape编码后的字符
2010/01/28 PHP
用PHP生成excel文件到指定目录
2015/06/22 PHP
php实现的任意进制互转类分享
2015/07/07 PHP
PHP的自定义模板引擎
2017/03/24 PHP
Javascript中神奇的this
2016/01/20 Javascript
jquery实现具有收缩功能的垂直导航菜单
2016/02/16 Javascript
javascript的理解及经典案例分析
2016/05/20 Javascript
JS使用eval()动态创建变量的方法
2016/06/03 Javascript
用js实现简单算法的实例代码
2016/09/24 Javascript
canvas滤镜效果实现代码
2017/02/06 Javascript
防止重复发送 Ajax 请求
2017/02/15 Javascript
详解有关easyUI的拖动操作中droppable,draggable用法例子
2017/06/03 Javascript
利用vue + koa2 + mockjs模拟数据的方法教程
2017/11/22 Javascript
vue路由组件按需加载的几种方法小结
2018/07/12 Javascript
vue iview的菜单组件Mune 点击不高亮的解决方案
2019/11/01 Javascript
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
[40:50]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第四场
2014/05/24 DOTA
用Python制作简单的朴素基数估计器的教程
2015/04/01 Python
在Python的Django框架中加载模版的方法
2015/07/16 Python
python实现自动登录
2018/09/17 Python
python 利用已有Ner模型进行数据清洗合并代码
2019/12/24 Python
Perricone MD裴礼康美国官网:抗衰老护肤品
2016/09/26 全球购物
亚洲领先的旅游体验市场:Voyagin
2019/11/23 全球购物
Ticketmaster意大利:音乐会、节日、艺术和剧院的官方门票
2019/12/23 全球购物
西班牙在线光学:Visual-Click
2020/06/22 全球购物
自我鉴定模板
2013/10/29 职场文书
小学家长会邀请函
2014/01/23 职场文书
初中语文教学反思
2014/02/02 职场文书
土木工程专业推荐信
2014/02/19 职场文书
人民教师求职自荐信
2014/03/12 职场文书
春季运动会开幕词
2015/01/28 职场文书
浅谈如何提高PHP代码质量之端到端集成测试
2021/05/28 PHP
Java输出Hello World完美过程解析
2021/06/13 Java/Android
Android开发手册TextInputLayout样式使用示例
2022/06/10 Java/Android
Win11 Beta 22621.601 和 22622.601今日发布 KB5017384修复内容汇总
2022/09/23 数码科技