SoFunction
Updated on 2025-04-09

PHP class that generates static pages

<?php 
class html 

    var $dir;        //dir for the htmls(without/) 
    var $rootdir;    //root of html files(without/):html 
var$name;       //html file storage path
var$dirname;    //Specified folder name
var$url;          //Get the source web address of the html file information
var$time;         //Time to fill in the html file information
var$dirtype;    //Catalogue storage method: year, month,,,
var $nametype;   //html file naming method: name

    function html($nametype='name',$dirtype='year',$rootdir='html') 
    { 
        $this->setvar($nametype,$dirtype,$rootdir); 
    } 

    function setvar($nametype='name',$dirtype='year',$rootdir='html') 
    { 
      $this->rootdir=$rootdir; 
      $this->dirtype=$dirtype; 
      $this->nametype=$nametype; 
    } 

    function createdir($dir='') 
    { 
        $this->dir=$dir?$dir:$this->dir; 

        if (!is_dir($this->dir)) 
        { 
            $temp = explode('/',$this->dir); 
            $cur_dir = ''; 
            for($i=0;$i<count($temp);$i++) 
            { 
                $cur_dir .= $temp[$i].'/'; 
                if (!is_dir($cur_dir)) 
                { 
                @mkdir($cur_dir,0777); 
                } 
            } 
        } 
    } 

    function getdir($dirname='',$time=0) 
    { 
        $this->time=$time?$time:$this->time; 
        $this->dirname=$dirname?$dirname:$this->dirname; 

        switch($this->dirtype) 
        { 
        case 'name': 
        if(empty($this->dirname)) 
           $this->dir=$this->rootdir; 
        else 
           $this->dir=$this->rootdir.'/'.$this->dirname; 
        break; 
        case 'year': 
        $this->dir=$this->rootdir.'/'.date("Y",$this->time); 
        break; 

        case 'month': 
        $this->dir=$this->rootdir.'/'.date("Y-m",$this->time); 
        break; 

        case 'day': 
        $this->dir=$this->rootdir.'/'.date("Y-m-d",$this->time); 
        break; 
        } 

        $this->createdir(); 

        return $this->dir; 
    } 

    function geturlname($url='') 
    { 
        $this->url=$url?$url:$this->url; 

        $filename=basename($this->url); 
        $filename=explode(".",$filename); 
        return $filename[0]; 
    } 

    function geturlquery($url='') 
    { 
        $this->url=$url?$url:$this->url; 

        $durl=parse_url($this->url); 
        $durl=explode("&",$durl[query]); 
        foreach($durl as $surl) 
        { 
          $gurl=explode("=",$surl); 
          $eurl[]=$gurl[1]; 
        } 
        return join("_",$eurl); 
    } 

    function getname($url='',$time=0,$dirname='') 
    { 
        $this->url=$url?$url:$this->url; 
        $this->dirname=$dirname?$dirname:$this->dirname; 
        $this->time=$time?$time:$this->time; 

        $this->getdir(); 

        switch($this->nametype) 
        { 
        case 'name': 
        $filename=$this->geturlname().'.htm'; 
        $this->name=$this->dir.'/'.$filename; 
        break; 

        case 'time': 
        $this->name=$this->dir.'/'.$this->time.'.htm'; 
        break; 

        case 'query': 
        $this->name=$this->dir.'/'.$this->geturlquery().'.htm'; 
        break; 

        case 'namequery': 
        $this->name=$this->dir.'/'.$this->geturlname().'-'.$this->geturlquery().'.htm'; 
        break; 

        case 'nametime': 
        $this->name=$this->dir.'/'.$this->geturlname().'-'.$this->time.'.htm'; 
        break; 

        } 
        return $this->name; 
    } 

    function createhtml($url='',$time=0,$dirname='',$htmlname='') 
    { 
        $this->url=$url?$url:$this->url; 
        $this->dirname=$dirname?$dirname:$this->dirname; 
        $this->time=$time?$time:$this->time; 
//The above guarantees that variables will be assigned to members of this class without repeated
        if(empty($htmlname)) 
            $this->getname(); 
        else 
$this->name=$dirname.'/'.$htmlname; //Get name

        $content=file($this->url) or die("Failed to open the url ".$this->url." !");; 

///////////////////// Key Steps---Read $this->url with file

  
        $content=join("",$content); 
        $fp=@fopen($this->name,"w") or die("Failed to open the file ".$this->name." !"); 
        if(@fwrite($fp,$content)) 
        return true; 
        else 
        return false; 
        fclose($fp); 
    } 
//////////////////////// Generate html with name as the name

    function deletehtml($url='',$time=0,$dirname='') 
    { 
        $this->url=$url?$url:$this->url; 
        $this->time=$time?$time:$this->time; 

        $this->getname(); 

        if(@unlink($this->name)) 
        return true; 
        else 
        return false; 
    } 

    /** 
     * function::deletedir() 
* Delete directory
*   @param $file Directory name (without /)
     * @return 
     */ 
     function deletedir($file) 
     { 
        if(file_exists($file)) 
        { 
            if(is_dir($file)) 
            { 
                $handle =opendir($file); 
                while(false!==($filename=readdir($handle))) 
                { 
                    if($filename!="."&&$filename!="..") 
                      $this->deletedir($file."/".$filename); 
                } 
                closedir($handle); 
                rmdir($file); 
                return true; 
            }else{ 
                unlink($file); 
            } 
        } 
    } 


?>