<?php
/**
 @Program: 文件夹与文件操作类
 @author:  cht
 @本类为文件操作类，实现了文件的建立，写入，删除，修改，复制，移动，创建目录，删除目录
 @列出目录里的文件等功能，路径后面别忘了加"/"
*/
class fileoperate
{
    var $path;// 完整的文件路径
    var $name;//文件名
    var $result;//对文件操作后的结果
	var $dir; //目录名

   /**
   * 本方法用来在$path目录下创建$name文件
   *
   * @param string $path
   * @param string $name
   */ 
   function creat_file($path,$name){//建立文件
     $filename=$path.$name;
     if (file_exists($filename)){
        echo "文件已经存在，请换个文件名";
     }else{
        if (file_exists($path)){
           touch($name);
           rename($name,$filename);
           echo "文件建立成功 </br>";
        }else{
           echo "目录不存在，请检查";
        }
      }
    }
	
   /**
   * 本方法用来写文件，向$path路径下$name文件写入$content内容，$bool为写入选项，值为1时
   * 接着文件原内容下继续写入，值为2时写入后的文件只有本次$content内容
   *
   * @param string_type $path
   * @param string_type $name
   * @param string_type $content
   * @param $bool_type $bool
   */
   function write_file($path,$name,$content,$bool){
    $filename=$path.$name;
    if ($bool==1) {
      if (is_writable($filename)) {
       $handle=fopen($filename,'a');
       if (!$handle) {
          echo "文件不能打开或文件不存在";
          exit;
       }
       $result=fwrite($handle,$content);
       if (!$result) {
          echo "文件写入失败";
       }else{
          echo "文件写入成功";
          fclose($handle);
	   }
      }else{
	   echo "文件不存在";
      }
	}
	
    if ($bool==2) {
       if (!file_exists($filename)) {
          $this->creat_file($path,$name);
          $handle=fopen($filename,'a');
          if (fwrite($handle,$content)){
             echo "文件写入成功";
		  }
       }else {
          unlink($filename);
          $this->creat_file($path,$name);
          $this->write_file($path,$name,$content,1);
          echo "文件修改成功";
       }
    }
   }

/**
* 本方法删除$path路径下$name文件
*
* @param string_type $path
* @param string_type $name
*/
   function del_file($path,$name){
     $name=iconv("UTF-8","gb2312",$name);
     $filename=$path.$name;
     if (!file_exists($filename)) {
       echo "<script language='javascript'>";
       echo "alert('文件不存在，请确认路径是否正确');";
       echo "window.location.href='".$_SERVER["HTTP_REFERER"]."';";
       echo "</script>";
     }else {
       if (unlink($filename)){
          echo "<script language='javascript'>";
          echo "alert('文件删除成功');";
          echo "window.location.href='".$_SERVER["HTTP_REFERER"]."';";
          echo "</script>";
       }else{
          echo "<script language='javascript'>";
          echo "alert('文件删除失败');";
          echo "window.location.href='".$_SERVER["HTTP_REFERER"]."';";
          echo "</script>";
       }
	 }
   }

/**
* 本方法删除$path路径下$name文件
*
* @param string_type $path
* @param string_type $name
*/
   function del_attach($path,$name){
     $name=iconv("UTF-8","gb2312",$name);
     $filename=$path.$name;
	 if (file_exists($filename)) {
	    unlink($filename);
	 }
   }
/**
* 本方法用来复制$name文件从$spath到$dpath
*
* @param string $name
* @param string $spath
* @param string $dpath
*/
   function copy_file($name,$spath,$dpath){//文件复制
    $name=iconv("UTF-8","gb2312",$name);
	$filename=$spath.$name;
    if (file_exists($filename)){
        $handle=fopen($filename,'a');
        copy($filename,$dpath.$name);
        if (file_exists($dpath.$name)){
           echo "文件复制成功";
        }else{
		   echo "文件复制失败";
		}
    }else{
	  echo "文件不存在";
    }
   }
/**
* 本方法把$name文件从$spath移动到$dpath路径
*
* @param string_type $path
* @param string_type dir$name
* @param string_type $dpath
*/
   function move_file($name,$spath,$dpath){//移动文件
	$name=iconv("UTF-8","gb2312",$name);
	$filename=$spath.$name;
    if (file_exists($filename)) {
       $result=rename($filename,$dpath.$name);
       if ($result==false or !file_exists($dpath)){
          //echo "文件移动失败或目的目录不存在";
		  return false;
       }else{ 
          //echo "文件移动成功";
		  return true;
       }
     }else {
       //echo "文件不存在，无法移动";
	   return false;
     }
   }
	
/*
* 函数名: flc_mkdir
* 功能: 创建新目
* 参数: $dir -- 目录名
*/
    function flc_mkdir($dir,$mode=0777){
      $u=umask(0);
      $r=mkdir($dir,$mode);
      umask($u);
      return $r;
    }
	
/*
* 函数名: flc_any_mkdir
* 功能: 创建新目录,与上面的flc_mkdir有点不同这个方法可以创建多级目录
* 如:flc_any_mkdir("abc/abc/abc/abc/abc")
* 参数: $dirs -- 目录名
*/
    function flc_any_mkdir($dirs,$mode=0777){
     if(!strrpos($dirs,'/')){
       return(fileoperate::flc_mkdir($dirs,$mode));
      }else{
       $forder=explode('/',$dirs);
       $f='';
       for($n=0;$n<count($forder);$n++){
           if($forder[$n]=='') continue;
           $f.=((($n==0)&&($forder[$n]<>''))?(''):('/')).$forder[$n];
           if(file_exists($f)){
               chmod($f,0777);
               continue;
               }else{
               if(fileoperate::flc_mkdir($f,$mode)) continue;
               else
               return false;
           }
         }
         return true;
       }
    }
	
/*
* 函数名: delforder
* 功能: 删除目录,不管该目录下是否有文件或子目录，全部删除，小心别删错.
* 参数: $file -- 源文件/目录
*/
    function delforder($file) {
      chmod($file,0777);
      if (is_dir($file)) {
           $handle = opendir($file);
           while($filename = readdir($handle)) {
            if ($filename != "." && $filename != "..")
             {
                 fileoperate::delforder($file."/".$filename);
             }
           }
           closedir($handle);
           return(rmdir($file));
      }else {
         unlink($file);
       }
    }
/*
* 函数名:downloadfile
* 功能: 下载指定的文件
* 参数: $file_path -- 文件路径
* 参数: $file_name -- 文件名
*/
    function downloadfile($file_path,$file_name){
       $filenametogbk=iconv("UTF-8","gb2312",$file_name);
	   $filename=$file_path.$filenametogbk;
	   if (!file_exists($filename)){
         echo "<script language='javascript'>";
         echo "alert('文件不存在,下载失败！');";
         echo "window.location.href='".$_SERVER["HTTP_REFERER"]."';";
         echo "</script>";
         exit;
       }else{
         $file = fopen($filename,"r");
         // 输入文件标签
         //header("content-type:text/html; charset=utf-8");
		 header('Content-Encoding: none');
         header("Content-type: application/octet-stream");
         header("Accept-Ranges: bytes");
         header("Accept-Length: ".filesize($filename));
         header( 'Content-Transfer-Encoding: binary' );
         header("Content-Disposition: attachment; filename=".$filenametogbk);
         header('Pragma: no-cache');
         header('Expires: 0');
         //输出文件内容
         echo fread($file,filesize($filename));
         fclose($file);
         exit;
      }
    }
//类结束
}
?>