<?php /***********************************************************************************/ /*/ /*/ /*/ Program: File System Class(FSC) /*/ /*/PHPProgramer :吴双(James Wu) /*/ /*/ Email: wu-shuang@163.net/*/ /*/ HomePage: http://www.dev-php.com /*/ /*/ Date: 2002-01-24 /*/ /*/ /*/ /***********************************************************************************/ class FSC { /**************************************************************************/ // 函数名: getfilesource // 功能: 得到指定文件的内容 // 参数: $file 目标文件 /**************************************************************************/ function getfilesource($file) { if ($fp = fopen($file, @ //r@#)){ $filesource = fread($fp, filesize($file)); fclose($fp); return $filesource; } else return false; } /**************************************************************************/ // 函数名: writefile // 功能: 创建新文件,并写入内容,如果指定文件名已存在,那将直接覆盖 // 参数: $file -- 新文件名 // $source 文件内容 /**************************************************************************/ function writefile($file, $source) { if ($fp = fopen($file, @ //w@#)){ $filesource = fwrite($fp, $source); fclose($fp); return $filesource; } else return false; } /**************************************************************************/ // 函数名: movefile // 功能: 移动文件 // 参数: $file -- 待移动的文件名 // $destfile -- 目标文件名 // $overwrite 如果目标文件存在,是否覆盖.默认是覆盖. // $bak 是否保留原文件 默认是不保留即删除原文件 /**************************************************************************/ function movefile($file, $destfile, $overwrite = 1, $bak = 0) { if (file_exists($destfile)) { if ($overwrite) unlink($destfile); else return false; } if ($cf = copy($file, $destfile)) { if (!$bak) return (unlink($file)); } return ($cf); } /**************************************************************************/ // 函数名: movedir // 功能: 这是下一涵数move的附助函数,功能就是移动目录 /**************************************************************************/ function movedir($dir, $destdir, $overwrite = 1, $bak = 0) { @set_time_limit(600); if (!file_exists($destdir)) FSC::notfate_any_mkdir($destdir); if (file_exists($dir) && (is_dir($dir))) { if (substr($dir, -1) != @ ///@#)$dir.=@#/@#; if (file_exists($destdir) && (is_dir($destdir))) { if (substr($destdir, -1) != @ ///@#)$destdir.=@#/@#; $h = opendir($dir); while ($file = readdir($h)) { if ($file == @ //.@#||$file==@#..@#) { continue; $file = ""; } if (is_dir($dir . $file)) { if (!file_exists($destdir . $file)) FSC::notfate_mkdir($destdir . $file); else chmod($destdir . $file, 0777); FSC::movedir($dir . $file, $destdir . $file, $overwrite, $bak); FSC::delforder($dir . $file); } else { if (file_exists($destdir . $file)) { if ($overwrite) unlink($destdir . $file); else { continue; $file = ""; } } if (copy($dir . $file, $destdir . $file)) if (!$bak) if (file_exists($dir . $file) && is_file($dir . $file)) @unlink($dir . $file); } } } else return false; } else return false; } /**************************************************************************/ // 函数名: move // 功能: 移动文件或目录 // 参数: $file -- 源文件/目录 // $path -- 目标路径 // $overwrite -- 如是目标路径中已存在该文件时,是否覆盖移动 // -- 默认值是1, 即覆盖 // $bak -- 是否保留备份(原文件/目录) /**************************************************************************/ function move($file, $path, $overwrite = 1, $bak = 0) { if (file_exists($file)) { if (is_dir($file)) { if (substr($file, -1) == @ ///@#)$dirname=basename(substr($file,0,strlen($file)-1)); else $dirname = basename($file); if (substr($path, -1) != @ ///@#)$path.=@#/@#; if ($file != @ //.@#||$file!=@#..@#||$file!=@#../@#||$file!=@#./@#)$path.=$dirname; FSC::movedir($file, $path, $overwrite, $bak); if (!$bak) FSC::delforder($file); } else { if (file_exists($path)) { if (is_dir($path)) chmod($path, 0777); else { if ($overwrite) @unlink($path); else return false; } } else FSC::notfate_any_mkdir($path); if (substr($path, -1) != @ ///@#)$path.=@#/@#; FSC::movefile($file, $path . basename($file) , $overwrite, $bak); } } else return false; } /**************************************************************************/ // 函数名: delforder // 功能: 删除目录,不管该目录下是否有文件或子目录,全部删除哦,小心别删错了哦! // 参数: $file -- 源文件/目录 /**************************************************************************/ function delforder($file) { chmod($file, 0777); if (is_dir($file)) { $handle = opendir($file); while ($filename = readdir($handle)) { if ($filename != "." && $filename != "..") { FSC::delforder($file . "/" . $filename); } } closedir($handle); return (rmdir($file)); } else { unlink($file); } } /**************************************************************************/ // 函数名: notfate_mkdir // 功能: 创建新目录,这是来自php.net的一段代码.弥补mkdir的不足. // 参数: $dir -- 目录名 /**************************************************************************/ function notfate_mkdir($dir, $mode = 0777) { $u = umask(0); $r = mkdir($dir, $mode); umask($u); return $r; } /**************************************************************************/ // 函数名: notfate_any_mkdir // 功能: 创建新目录,与上面的notfate_mkdir有点不同,因为它多了一个any,即可以创建多级目录 // 如:notfate_any_mkdir("abc/abc/abc/abc/abc") // 参数: $dirs -- 目录名 /**************************************************************************/ function notfate_any_mkdir($dirs, $mode = 0777) { if (!strrpos($dirs, @ ///@#)) { return (FSC::notfate_mkdir($dirs, $mode)); } else { $forder = explode(@ ///@#,$dirs); $f = @ //@#; for ($n = 0; $n{if ($forder[$n] == @ //@#) continue; $f.= ((($n == 0) && ($forder[$n] <> @ //@#))?(@#@#):(@#/@#)).$forder[$n]; if (file_exists($f)) { chmod($f, 0777); continue; } else { if (FSC::notfate_mkdir($f, $mode)) continue; else return false; } } return true; } } /*********************************************************************************/ /*/ End Class FSC /*/ /*********************************************************************************/ } ?>