<?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 /*/
/*********************************************************************************/
}
?>
ログイン後にコピー