php靜態化為html-簡單做-定時做
日前一位朋友求救說它有個客戶的php網站,client每次request首頁都會產生近五十個mysql連線,而且網站還放在虛擬主機上面,所以常常一整天下來就會被主機商lock,問我該怎麼辦?
先看看首頁為什麼一次就要50個資料庫連結…喔,原來類似市集的入口網站,有許多不同分類及動態廣告的呈現方式。
既然連線數省不掉,就建議他和業主溝通,讓系統每十五分鐘讀取一次該php首頁,並將更新後的資料自動建立html頁面;然後變更首頁連結,將使用者都導入html頁面;簡單完成php靜態化快取的工作,降低主機負擔。
1. 編寫快取程式cache.php,如下例(按需求自行更改):
<?php //記錄原始的timeout秒數 $old_timeout = ini_get('default_socket_timeout'); //設定新的timeout秒數 ini_set('default_socket_timeout',20); //取得php首頁的內容 if (false !== ($contents = file_get_contents('http://網站路徑/index.php'))) { //如果內容有讀取完成至</html> if (strpos($contents,'</html>')!==false) { //建立html首頁 $html = fopen('/儲存路徑/index.html','w'); fwrite($html,$contents); fclose($html); } } //回復原始的timeout秒數 ini_set('default_socket_timeout',$old_timeout); ?>
2. 再來是設定排程去執行它,如圖(登入cpanel):
點選工作排程的圖示,再選擇標準模式,設定範例如下: