文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>非常有用的文件操作类

非常有用的文件操作类

时间:2006-01-23  来源:wleige


    File 1.0 - A wrapper class to common PHP file operations
    Copyright ? 1999 CDI,
[email protected]

    All Rights Reserved
*/
/******************************************************************
//以下为本文件类中用到的所有的方法和数据原形
METHODS
new File()
clear_cache( void )
is_sane( $fileName,$must_exist=0,$noSymLinks=0,$noDirs=0 )
read_file( $fileName )
strip_read( $fileName )
write_file( $fileName, $data )
copy_file( $oldFile, $newFile )
get_files( $path, $fileExt = 'ALL_FILES')
is_owner( $fileName, $uid = "" )
is_inGroup( $fileName, $gid = "" )
get_real_uid()
get_real_gid()
VARIABLES
ERROR (string)
BUFFER (integer, default -1 )
STATCACHE ( array, default NULL )
TEMPDIR ( string, default '/tmp' )
REALUID ( integer, default = -1 )
REALGID ( integer, default = -1 )
**********************************************************************/
Class File
{
    var $ERROR = "";
    var $BUFFER = -1;
    var $STATCACHE = array();
    var $TEMPDIR = '/tmp';
    var $REALUID = -1;
    var $REALGID = -1;
    function File ()
    {
global $php_errormsg;
return;
    }
    function clear_cache()
    {
    //清空 STATCACHE     
unset($this->STATCACHE);
$this->STATCACHE = array();
return true;
    }
    function is_sane($fileName = "", $must_exist = 0, $noSymLinks = 0, $noDirs = 0)
    {
$exists = false;
if(empty($fileName)) {    return false; }//如果文件名是空的,返回错误
if($must_exist != 0)
{
     if(!file_exists($fileName))//文件不存在
     {
   $this->ERROR = "is_sane: [$fileName] does not exist";
   return false;
     }
     $exists = true;
}
if($exists)
{
     if(!is_readable($fileName))//文件不可读
     {
   $this->ERROR = "is_sane: [$fileName] not readable";
   return false;
     }
     if($noDirs != 0)
     {
   if(is_dir($fileName))//给出的文件名实际是一个目录
   {
       $this->ERROR = "is_sane: [$fileName] is a directory";
       return false;
   }
     }
     if($noSymLinks != 0)
     {
   if(is_link($fileName))//如果文件是一个符号链接
   {
       $this->ERROR = "is_sane: [$fileName] is a symlink";
       return false;
   }
     }
} // end if exists
return true;   
    }
//    **************************************************************
    function read_file ($fileName = "" )
    {
$contents = "";
if(empty($fileName))//如果文件名为空
{
     $this->ERROR = "read_file: No file specified";
     return false;
}
if(!$this->is_sane($fileName,1,0,1))
{
     // Preserve the is_sane() error msg
     return false;
}
$fd = @fopen($fileName,"r");//打开文件
if( (!$fd) || (empty($fd)) )//打开文件出错
{
     $this->ERROR = "read_file: File error: [$php_errormsg]";
     return false;
}
$contents = fread($fd, filesize($fileName) );//读取文件内容到//$content中
fclose($fd);
       return $contents;
    }
//    **************************************************************
//    Read a file via fgetss(), which strips all php/html
//    from the file.
//  使用fgetss()来读取文件的内容,
//  它把所有的html和php标记都忽略了
    function strip_read ($fileName = "", $strip_cr = 0)
    {
if(empty($fileName))//如果文件为空
{
     $this->ERROR = "strip_read: No file specified";
     return false;
}
if(!$this->is_sane($fileName,1,0,1))
{
     // Preserve the error
     return false;
}
if($this->BUFFER > 0)
{
     $buffer = $this->BUFFER;
} else {
     $buffer = filesize($fileName);
}
$contents = "";
$fd = @fopen($fileName,"r");
if( (!$fd) || (empty($fd)) )
{
     $this->ERROR = "strip_read: File error: [$php_errormsg]";
     return false;
}
while(!feof($fd))
{
     $contents .= fgetss($fd,$buffer);
}
fclose($fd);
       return $contents;
    }
//    **************************************************************
    function write_file ($fileName,$Data)
    {
$tempDir = $this->TEMPDIR;//设定临时目录
$tempfile   = tempnam( $tempDir, "cdi" );//临时文件
if(!$this->is_sane($fileName,0,1,1))
{
     return false;
}
if (file_exists($fileName))
{
     if (!copy($fileName, $tempfile))
     {
   $this->ERROR = "write_file: cannot create backup file [$tempfile] :  [$php_errormsg]";
   return false;
     }
}
$fd = @fopen( $tempfile, "a" );
if( (!$fd) or (empty($fd)) )
{
     $myerror = $php_errormsg;
     unlink($tempfile);//删除文件
     $this->ERROR = "write_file: [$tempfile] access error [$myerror]";
     return false;
}
fwrite($fd, $Data);//向临时文件写入内容
fclose($fd);
if (!copy($tempfile, $fileName))//把临时文件复制到正式的文件中
{
     $myerror = $php_errormsg;   // Stash the error, see above
     unlink($tempfile);
     $this->ERROR = "write_file: Cannot copy file [$fileName] [$myerror]";
     return false;
}
unlink($tempfile);//删除临时文件
if(file_exists($tempfile))
{
     // Not fatal but it should be noted
     $this->ERROR = "write_file: Could not unlink [$tempfile] : [$php_errormsg]";
}
return true;
    }
//    **************************************************************
    function copy_file ($oldFile = "", $newFile = "")
    {
if(empty($oldFile))
{
     $this->ERROR = "copy_file: oldFile not specified";
     return false;
}
if(empty($newFile))
{
     $this->ERROR = "copy_file: newFile not specified";
     return false;
}
if(!$this->is_sane($oldFile,1,0,1))
{
     // preserve the error
     return false;
}
if(!$this->is_sane($newFile,0,1,1))
{
     // preserve it
     return false;
}
if (! (@copy($oldFile, $newFile)))//把$oldfile复制到$newfile
{
     $this->ERROR = "copy_file: cannot copy file [$oldFile] [$php_errormsg]";
     return false;
}
return true;
    }
//    **********************************************
    function get_files ($root_dir, $fileExt = 'ALL_FILES')
    {
$fileList = array();
if(!is_dir($root_dir))
{
     $this->ERROR = "get_files: Sorry, [$root_dir] is not a directory";
     return false;
}
if(empty($fileExt))
{
     $this->ERROR = "get_files: No file extensions specified";
     return false;
}
$open_dir = @opendir($root_dir);
if( (!$open_dir) or (empty($open_dir)) )
{
     $this->ERROR = "get_files: Failed to open dir [$root_dir] : $php_errormsg";
     return false;
}
$fileCount = 0;
while ( $file = readdir($open_dir))//读取目录的内容
{
     if( (!is_dir($file)) and (!empty($file)) )
     {
   if($fileExt == 'ALL_FILES')
   {
       $fileList[$fileCount] = $file;
       $fileCount++;
   }
   else
   {
       if(eregi(".\.($fileExt)$",$file))
       {
     $fileList[$fileCount] = $file;
     $fileCount++;
       }
   }
     }
}
closedir($open_dir);
return $fileList;
    }    // end get_files
    function is_owner($fileName, $uid = "")
    {
if(empty($uid))
{
     if($this->REALUID TEMPDIR;
   $tempFile = tempnam($tempDir,"cdi");
   if(!touch($tempFile))
   {
       $this->ERROR = "is_owner: Unable to create [$tempFile]";
       return false;
   }
   $stats = stat($tempFile);
   unlink($tempFile);
   $uid = $stats[4];
     }
     else
     {
   $uid = $this->REALUID;
     }
}
$fileStats = stat($fileName);
if( (empty($fileStats)) or (!$fileStats) )
{
     $this->ERROR = "is_owner: Unable to stat [$fileName]";
     return false;
}
$this->STATCACHE = $fileStats;
$owner = $fileStats[4];
if($owner == $uid)
{
     return true;
}
$this->ERROR = "is_owner: Owner [$owner] Uid [$uid] FAILED";
return false;
    }
    function is_inGroup($fileName, $gid = "")
    {
if(empty($gid))
{
     if($this->REALGID TEMPDIR;
   $tempFile = tempnam($tempDir,"cdi");
   if(!touch($tempFile))
   {
       $this->ERROR = "is_inGroup: Unable to create [$tempFile]";
       return false;
   }
   $stats = stat($tempFile);
   unlink($tempFile);
   $gid = $stats[5];
     }
     else
     {
   $gid = $this->REALGID;
     }
}
$fileStats = stat($fileName);//取得文件的状态
if( (empty($fileStats)) or (!$fileStats) )
{
     $this->ERROR = "is_inGroup: Unable to stat [$fileName]";
     return false;
}
$this->STATCACHE = $fileStats;
$group = $fileStats[5];
if($group == $gid)
{
     return true;
}
$this->ERROR = "is_inGroup: Group [$group] Gid [$gid] FAILED";
return false;
    }
    function get_real_uid()
    {
$tempDir = $this->TEMPDIR;
$tempFile = tempnam($tempDir,"cdi");
if(!touch($tempFile))
{
     $this->ERROR = "is_owner: Unable to create [$tempFile]";
     return false;
}
$stats = stat($tempFile);
unlink($tempFile);
$uid = $stats[4];
$gid = $stats[5];
$this->REALUID = $uid;
$this->REALGID = $gid;
return $uid;
    }
    function get_real_gid()
    {
$uid = $this->get_real_uid();
if( (!$uid) or (empty($uid)) )
{
     return false;
}
return $this->REALGID;
    }
}    // end class File
?>


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载