觉得好用的拿去用,有需要改善的地方希望大家提出来,谢谢!
<?php
/*
功能:文件操作类
作者:Oll-chen
时间:2013-11-26
 */
class File { /*
功能:获取指定文件的内容
@param file 目标文件
return string
 */
public function getFileResource($file) {
if ($fp=fopen($file,'r')) {
$filesource=fread($fp,filesize($file));
fclose($fp);
return $filesource;
}
} /*
功能:创建新文件,并写入内容,如果指定文件存在,则直接覆盖
@param file 新文件
@param source 文件内容
return int 写入的字符数
 */
public function createNewFile($file,$source="") {
if($fp=fopen($file, 'w')) {
$filesource=fwrite($fp, $source);
fclose($fp);
return $filesource;
}else {
return false;
} }

/*
功能:移动文件
@param file 待移动的文件
@param newfile 目标文件
@param overwrite 是否覆盖目标文件,默认是
@param bak 是否备份 默认否
return bool 
 */
public function moveFile($file,$newfile,$overwrite=1,$bak=0) {
if (file_exists($newfile)) { //目标文件存在
if ($overwrite) {
unlink($newfile); //删除文件
}else {
return false;
}
} if($cf=copy($file, $newfile)){
if (!$bak) {
return (unlink($file));
}
return $cf;
}
}

/*
功能:移动目录
@param dir 被移动文件夹
@param newdir 目标文件夹
@param overwrite 是否覆盖目标文件夹,默认是
@param bak 是否备份 默认否
 */
public function moveDir($dir,$newdir,$overwrite=1,$bak=0) {
@set_time_limit(600); //设置允许脚本运行的时间
if (!file_exists($newdir)) { //如果目标文件夹不存在
mkdir($newdir,0777,true); //新建目录
}
if (file_exists($dir)&&is_dir($dir)) { //判断$dir文件夹是否存在
if(substr($newdir, -1)!='/'){ //如果$dir末尾没有/
$newdir .= '/'; //添加文件夹分隔符
}
$h=opendir($dir); //创建文件句柄
while ($file=readdir($h)) { //readdir返回目录中下一个文件的文件名
if($file=="."||$file=="..") { //如果读取内容为 . 或 .. ,则跳过
continue;
}
if(is_dir($dir.'/'.$file)) { //判断$file是否为文件夹
if(!file_exists($newdir.$file)) { //如果目标文件夹中不存在该子目录
mkdir($newdir.$file,0777,true);
}else {
chmod($newdir.$file, 0777); //改变文件夹权限
}
File::moveDir($dir.'/'.$file,$newdir.$file,$overwrite,$bak); //递归调用本函数
File::delForder($dir.'/'.$file); //删除原文件夹
}else { //如果$file不为文件夹
if(file_exists($newdir.$file)) { //判断目标目录中是否存在$file文件
if($overwrite){
unlink($newdir.$file);
}
else {
continue;
$file='';
}
}
if(copy($dir.'/'.$file, $newdir.$file)) { //移动文件
if(!$bak){ //是否保留原文件
if(file_exists($dir.'/'.$file)){
@unlink($dir.'/'.$file);
}
}
}
} }  }else {
return false;
}
}

/*
功能:删除文件或文件夹
@param file 目标文件
return 成功返回true
 */
public function delForder($file) {
if(file_exists($file)) { //检查文件是否存在
chmod($file,0777);
if(is_dir($file)){ //判断是否为文件夹
$h=opendir($file);
while ($filename=readdir($h)) {
if($filename!='.'&&$filename!='..') {
File::delForder($file.'/'.$filename);
}
}
closedir($h);
return (rmdir($file)); //删除文件夹
}else {
unlink($file);
}
}else {
die('文件不存在!');
}
}

}[code=php][/code]

解决方案 »

  1.   

    mkdir($newdir.$file,0777,true);
    存在问题,除低版本的 windows 外,操作系统一般不允许匿名用户创建同时具有写和执行权限的目录
    所以应在创建目录后检查及修改权限
      

  2.   

    说句实话吧。你这个只有类的形,而没有类的神,里面的方法全是孤立的,觉得你可以再改进改进,通篇没看到一个$this变量(别误会,不是说没有$this就不叫类),如果你的本意就只是做一些方法的集合,那把这些方法改成static是不是会更好呢。