Home > Article > Backend Development > How to generate static html pages in php (2 methods), 2 static methods_PHP tutorial
Because every time the user clicks on the dynamic link, a data query request will be sent to the server. For a website with potentially millions of visits, this is undoubtedly a huge burden on the server, so converting dynamic data into static HTML pages has become the first choice to save manpower and material resources.
Because I had no corresponding experience before, I thought this technology was very mysterious at first, but after looking at some examples, I found that it is not that complicated (but the information on the Internet is not particularly detailed). After a morning and afternoon experiment, I finally completed the task I was supposed to do. Here are some thoughts and a simple example
I hope the prawns won’t laugh at me
Generally speaking, there are two ways to use php to convert and output html pages. The article quoting Da Xia is as follows:
The first one: using templates.
There are currently a lot of PHP templates, including the powerful smarty and the simple and easy-to-use smarttemplate. Each of their templates has a function to get the output content. The way we generate static pages is to use this function. The advantage of using this method is that the code is clearer and more readable.
Here I use smarty as an example to illustrate how to generate a static page:
<?php require("smarty/Smarty.class.php"); $t = new Smarty; $t->assign("title","Hello World!"); $content = $t->fetch("templates/index.htm"); //这里的 fetch() 就是获取输出内容的函数,现在$content变量里面,就是要显示的内容了 $fp = fopen("archives/2005/05/19/0001.html", "w"); fwrite($fp, $content); fclose($fp); ?>
The second method: use the ob series of functions.
The functions used here are mainly ob_start(), ob_end_flush(), ob_get_content(), where ob_start() means to open the browser buffer. After opening the buffer, all non-file header information from the PHP program will not will be sent, but stored in the internal buffer until you use ob_end_flush(). The most important function here is ob_get_contents(). The function of this function is to obtain the contents of the buffer, which is equivalent to the fetch() above. ), the same principle applies.
<?php ob_start(); echo "Hello World!"; $content = ob_get_contents();//取得php页面输出的全部内容 $fp = fopen("archives/2005/05/19/0001.html", "w"); fwrite($fp, $content); fclose($fp); ?>
The second method I chose is to use the ob series of functions
I was a little confused when I first read this. Later I learned that ob means output buffering, which is output buffering
When you are ready to output, all the data is saved in ob. After the server parses the php, all the html codes to be output to the client are stored in ob. If we want to output an html static page, we only need to take out the cache and write it. Just one html page
So the principle is actually very simple
Several functions are used here. Since I am new to PHP and I don’t understand many functions, I will explain them here. I hope it can help everyone
ob_start(): Start "capturing" the cache, that is, start from here and open the browser's cache
ob_end_flush(): Turn off browser cache
ob_get_content(): Read cache content
fopen("File path", "Open mode") opens a file. There are several opening modes for this function. Here are the main modes:
"r" Open in read-only mode and point the file pointer to the file header.
“r” opens in read-write mode and points the file pointer to the file header.
"w" turns on writing mode, points the file pointer to the file header and truncates the file size to zero. If the file does not exist, try to create it.
"w" opens in read-write mode, points the file pointer to the file header and truncates the file size to zero. If the file does not exist, try to create it.
fwrite("File name", "Write content") Write file
fclose() closes the file
Since there are many html files I want to convert, there may be hundreds of them, so the path to fopen cannot be statically specified here. You can set a path variable to save the id and other information sent by the user to facilitate the naming of html files. Here is what I combined A simple example of reading xml data in php last time
<?php ob_start();//打开浏览器缓存 //下面是读取xml数据 $parser = xml_parser_create(); //创建一个parser编辑器 xml_set_element_handler($parser, "startElement", "endElement");//设立标签触发时的相应函数 这里分别为startElement和endElenment xml_set_character_data_handler($parser, "characterData");//设立数据读取时的相应函数 $xml_file="1.xml";//指定所要读取的xml文件,可以是url $filehandler = fopen($xml_file, "r");//打开文件 while ($data = fread($filehandler, 4096)) { xml_parse($parser, $data, feof($filehandler)); }//每次取出4096个字节进行处理 fclose($filehandler); xml_parser_free($parser);//关闭和释放parser解析器 $name=false; $position=false; function startElement($parser_instance, $element_name, $attrs) //起始标签事件的函数 { global $name,$position; if($element_name=="NAME") { $name=true; $position=false; echo "名字:"; } if($element_name=="POSITION") {$name=false; $position=true; echo "职位:"; } } function characterData($parser_instance, $xml_data) //读取数据时的函数 { global $name,$position; if($position) echo $xml_data."<br />"; if($name) echo $xml_data."<br />"; } function endElement($parser_instance, $element_name) //结束标签事件的函数 { global $name,$position; $name=false; $position=false; } //xml数据读取完毕 $htmlname=$id.".html";//$id可以自己定义 这里代表用户传来的id $htmlpath="archives/".$htmlname; //设置路径变量 $content = ob_get_contents();//取得php页面输出的全部内容 $fp = fopen($htmlpath, "w"); fwrite($fp, $content); fclose($fp); ?>
The above content is to share with you the method of generating static html page in php (2 methods). I hope you like it.