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