PHP

Three Methods of Generating Static Pages from PHP Dynamic Pages


It is very simple to generate static pages, that is, to define templates and template titles, and then replace them with str_replace, which is the most commonly used method. Another one is to use ob_get_contents output to obtain and then generate html, and another one is not recommended to use file_get_contents to directly access remote files and save them, which has poor performance.

The specific method is simply described as follows: 1. Use the file function to get the template string of the static page, and then use the str_replace function to replace what needs to be replaced and write it to a new file. 2. Use the output control function of PHP (Output Control) to get the static page string and write it to a new file.

$filemodel="template/it.php";           // Template address
$file=fopen($filemodel,"rb");           // Open the template and get the file pointer
$temp=fread($file,filesize($filemodel));    // Get the template file html Code

Method 1: ob_get_contents ()

This is a very convenient method, is also a very common method, the implementation principle is: first open the cache, and then create the corresponding static page file, write the contents of the cache, empty the cache. Example:

ob_strart();// Open buffer
$fn=date('ymdhis').rand(1000,9999).'html';// Generate file name
require("supply.php");// Load the file where you want to generate the static page, because there is a ob_clean() So it won't show up now
$fs=fopen($fn,'w');// Open a static page file
fwrite($fs,ob_get_contents());// Generate static files
ob_clean();// Empty the cache

Method 2: file_get_contents ();

$fn=date('ymdhis').rand(1000,9999).'html';
$url= 'http://'.$_SERVER['HTTP_HOST']."/";// Attention
$content=file_get_contents($url);
$fs=fopen($fn,'w');
fwrite($fs,$content);

If you are using only the filename instead of URL, then if you are using a reference file such as require (‘header. php’); Then the contents in header. php will not be displayed.

Method 3: str_replace ()

$filemodel="supply.php";  String 5$file=fopen($filemodel,"w+");
$temp=fread($file,filesize($filemodel));
$temp=str_replace("[title]",$title,$temp);
$temp=str_replace("[postTime]",$postTime,$temp);
$temp=str_replace("[content]",$content,$temp);

This method is suitable for very simple pages, if there are reference files such as require (‘header. php’) in supply. php; Then the contents in header. php will not be displayed In a practical application, you can write a class that generates static pages.

/*+++
|
|  Usage
|   $shtml = new Shtml($Url,$FileBag,$FolderName,$fileid)
|   $Url:        Page  URL  Address
|   $FileBag:    Folder tag    1  For : Specify a folder  
|         2  For : Default folder ( Time ( Year, month, day ))
|        $FolderRoot html File storage path
|   $FolderName  Specify the name of the folder  $FileBag For 2 Hour   Can be written as null ("");
|   $fileid       Static page name ( Suffix   Default to  .html)
|    
|
|
/*++*/
class Shtml
{
var $message1="Error    1: You write class Shtml is Wrong !   The second parameter is 1 or 2 in   this class!.";
var $message2="Error    2: The file write    Error.";
function __construct ($Url,$FileBag,$FolderRoot,$FolderName,$fileid)
{
$this->Url   = $Url;
$this->FileBag   = $FileBag;
$this->FileRoot = $FolderRoot;
$this->FileName = $FolderName;
$this->fileid    = $fileid;
Shtml::useFolder ();
}
/************* Get data *******************/
public function loadcontent ($Folder)
{  
ob_start();
require_once $this->Url;
Shtml::writehtml ($Folder,ob_get_contents());
ob_clean();
}
/**********  Specify a folder *****************/
public function useFolder ()
{   
if($this->FileBag==1)
{
$Folder=$this->FileName;
}
else if($this->FileBag==2)
{
$Folder=date('Ymd',time());
}
else
{
exit($this->message1);
}
if(!is_dir($this->FileRoot.$Folder)){ mkdir($this->FileRoot.$Folder,0700);}
Shtml::loadcontent ($Folder);
}
/**********  Generate static pages *****************/
public function writehtml ($Folder,$cache_value)
{  
$file   = fopen($this->FileRoot.$Folder.'/'.$this->fileid.'.html','w+');
fwrite($file,$cache_value);
fclose($file);
}
}
$fileid=2;
$shtml = new Shtml("https://www.ofstack.com",1,"","cc",$fileid);

To sum up, this generation of html program code does not generate paging, if there are many articles, it only generates 1 article, if we need to make major changes to improve, we will not introduce it here. Interested friends can test and improve 1, and I believe there will be no small harvest!

I hope this article is helpful to everyone’s PHP programming.