Generate HTML static pages from PHP and store them in a directory created with the name of year and month.
Read all the data and generate it in batches. A prompt will pop up after all the data is generated.
You can specify the batch generation quantity. It is recommended not to exceed 800, otherwise there will be problems with the execution speed.
(For well-known reasons, the names of data fields related to the database have been changed, and the parameter filtering part has been removed for code clarity)
Note: The original dynamic address is moban.php?id=1, and the generated address is html/200808/sell_1.html. page.php is the paging program, which is published in this blog.
How to use the page, save this code as make.php, and use the browser to access make.php?t=quantity&pg=page; for example, make.php?t=300&pg=2, that is, 300 items are generated each time Data is generated starting from page 2 of the data list, that is, skipping the first 300 items. If you access make.php directly without adding any parameters, 200 items will be generated each time by default, starting from the first page.
Full example:
<?php if($_GET[pg]==''){ $aa=1; }else{ $aa=$_GET[pg]; } include("admin/conn.php"); require_once("page.php"); $result=mysql_query("select * from 2carsell "); $totle=mysql_num_rows($result); $pagelist = $_GET[t]; if($_GET[t]==''){ $pagelist='200'; }else{ $pagelist=$_GET[t]; } $pager = new Pager($totle,$pagelist); $datastat=" 共 <b>".$pager->countall."</b> 条,每次生成 <b>".$pager->countlist."</b> 条,共需生成 <b>".$pager->page."</b> 次";//数据统计 $bb=$pager->page; $pagenav=$pager->backstr.$pager->thestr.$pager->nextstr; $limitFrom = $pagelist*($pager->pg-1); $result=mysql_query("select * from 2carsell ORDER BY id DESC limit $limitFrom,$pagelist"); ?> <center><div style="font-size:14px;"><b>第 <font color=red><?echo $aa?></font > 次页面生成中..<? echo $datastat?></b></div><br> <? //php生成静态页面 print "<center><textarea name=textarea class=textarea style='width:520px;height:455px'>"; while($datauser=mysql_fetch_array($result)){ $iid=$datauser[id]; $html = file_get_contents("/moban.php?id=".$iid.""); $sql="select * from 2carsell where id=$iid"; $data=mysql_fetch_array(mysql_query($sql)); $path=date("Ym",$data[PutDate]); $testdir="html/".$path; if(file_exists ($testdir)): else: mkdir ($testdir, 0777); echo "目录".$testdir."创建成功!<br>"; endif; $filename = "html/$path/sell_$iid.html"; // 使用写入模式打开$filename if (!$handle = fopen($filename, 'w')) { print "不能打开文件 $filename"; exit; } if (is_writable($filename)) { // 将$html写入到我们打开的文件中。 if (!fwrite($handle, $html)) { print "不能写入到文件 $filename"; exit; } print "文件 $filename 更新成功! \r"; fclose($handle); } else { print "文件 $filename 不可写"; } ?> <? }?> </textarea> <br><br> <div style="font-size=12px"><? echo $datastat." "?></div><br><br> <? $aa=$aa+1; if($aa>$bb){ echo '<font color=blue>恭喜,所有页面生成完毕!</font>'; echo "<script>alert('所有文档生成/更新完毕!')</script>"; }else{ echo "<Script> window.location='make.php?t=$pagelist&pg=$aa'; </script>"; } ?>
After reading the examples, let’s analyze and analyze them
Generally speaking, there are two ways to use php to convert and output html pages. The article quoted by 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 function. 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 stored 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 reading and writing 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 a lot of html files that 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 that can save the ID and other information sent by the user to facilitate naming of html files. Here is what I combined. A simple example of php reading xml data 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); ?>