之前做了一個PB制作的網站,采集數據達到一萬五千條,此時網站首頁在訪問index.php的時候,需要等待至少一分鐘才能載入,相當卡。但是其他頁面運行還是很流暢的,即使我使用的是香港服務器,訪問速度也不差。
于是將首頁換成html頁面,訪問速度基本是秒開,再訪問其他頁面,速度也很快,這樣的體驗效果很好。但是之前是手工制作的index.html,于是考慮有沒有簡單的辦法生成index.html.
程序是有靜態(tài)緩存的,打開: runtime cache目錄下可以看到生成了很多不規(guī)則的html文件。其中有一個就是首頁的html,于是考慮直接讀取這個將它寫到網站根目錄下。
**步:一個讀取并寫入到根目錄下的PHP文件放在根目錄下。例如:html.php
內容如下:當然了,里面的一些東西可以改成自己的。temp_file后面的路徑地址,為什么我使用:indexphp.html,后面我會提到。
<?php header('content-type:text/html; charset=utf-8');//防止生成的頁面亂碼 $title = "PHP 動態(tài)生成靜態(tài)HTML頁面"; //定義變量 $url = "https://www.zuoan.com.cn/"; $temp_file = "runtime/cache/indexphp.html"; //臨時文件,也可以是模板文件 $dest_file = "index.html"; //生成的目標頁面 $fp = fopen($temp_file, "r"); //只讀打開模板 $str = fread($fp, filesize($temp_file));//讀取模板中內容 $str = str_replace("{penglig_site_title}", $title, $str);//替換內容 $str = str_replace("{penglig_site_url}", $url, $str);//替換內容 fclose($fp); $handle = fopen($dest_file, "w"); //寫入方式打開需要寫入的文件 fwrite($handle, $str); //把剛才替換的內容寫進生成的HTML文件 fclose($handle);//關閉打開的文件,釋放文件指針和相關的緩沖區(qū) echo "<script>alert('生成成功');window.location.href='".$dest_file."';</script>"; ?>
第二步:就是上面說的temp_file后面的路徑地址
由于程序的緩存文件是隨機生成的,而且每隔一段時間它是發(fā)生變化的。
于是我們考慮將這個緩存文件生成的名字固定一下,不讓它隨機變化。
打開: core view 下面的:view.php
第153行有這樣一段代碼:
$cacheFile = $this->cachePath . '/' . md5(get_http_url() . $_SERVER["REQUEST_URI"] . $lg . $wap) . '.html'; // 緩存文件
它就是隨機生成了靜態(tài)緩存中的html頁面名字。
我們改造它一下:
$urlname = $_SERVER["REQUEST_URI"]; //獲取到當前的路徑地址 $newurl = preg_replace('/W/', '', $urlname); //去除路徑地址中的/符號,避免無法寫入到目錄 $cacheFile = $this->cachePath . '/' . $newurl . '.html'; //名稱和后綴合并并寫到到緩存目錄
通過這一步,當訪問網站根目錄的index.php 的時候就會生成一個靜態(tài)HTML名字叫:indexphp.html到緩存目錄。也就是**步我所選擇的位置。
第三步:其實到這一步,可以通過手工生成了靜態(tài)了,訪問一個網站的:index.php,再訪問一下:html.php就實現了。但是這樣有點麻煩。
我們直接在后臺添加一個點擊生成來得方便一點。
后臺的原本的服務器信息感覺沒什么用,就用它來制作生成首頁的按鈕吧。
打開后臺的模型文件:server.html,改成以下代碼:
{include file='common/head.html'} <div class="layui-body"> <div class="layui-tab layui-tab-brief" lay-filter="tab"> <ul class="layui-tab-title"> <li class="layui-this" lay-id="t1">生成靜態(tài)首頁HTML</li> </ul> <iframe id="iframe" src="/index.php" frameborder="0" width="100%" height="0px"></iframe> <a href="/html.php" class="layui-btn layui-btn-sm layui-btn-danger">點擊生成首頁HTML</a> </div> </div> {include file='common/foot.html'}
*后實現的效果就是:
此方法目錄只適合單語言站,并且是響應式的網站,不適合多語言文字或者多數據區(qū)域站點,或者獨立手機版。
多語言站點一般為企業(yè)站,數據量一般不大,所以也就沒有必要花時間去研究了。