PHP頁面靜態化:真靜態兩種方案,php靜態
----------------------------------------------------------------------------------------------
方案1:如果靜態檔案存在,且產生時間30秒內,直接返回靜態頁面(有時間延遲)
/*
|------------------
|
|------------------
*/
header('content-type:text/html;charset=utf-8');$id = $_GET['id'] ? intval($_GET['id']) : '';if($id === '') die('請輸入要查詢的新聞id!');$html_file = "news-id-".$id.".html";//1.主要代碼if(file_exists($html_file) && filemtime($html_file) + 30 >= time()){ echo '靜態頁面:'; echo file_get_contents($html_file);exit;}//這裡也可以使用DB工具類$con = mysql_connect('localhost', 'root', '123456');if(!$con){ die('串連失敗!');}mysql_select_db('testdb', $con);$sql = "select * from bo_question where question_id = $id";$res = mysql_query($sql, $con);if($row = mysql_fetch_assoc($res)){ ob_start();//2.啟動ob緩衝 header('content-type:text/html;charset=utf-8'); echo ''; echo 'echo; echo; echo; echo
; '
| 問題詳細內容 |
' "
| 標題:{$row['question_title']} |
" "
| 詳細:{$row['question_detail']} |
" '
'; $ob_str = ob_get_contents(); //3.把ob_str儲存到一個靜態檔案頁面,取檔案名稱有講究:1.唯一標識該新聞 2.利於seo file_put_contents("news-id-".$id.".html", $ob_str);
//關閉資料庫連接(非必須; 非長串連下,指令碼執行完會自動關閉)
mysql_close($con);}else{ echo '沒有查詢到資源!';}
@黑眼詩人
方案2:使用模板替換技術(沒有時間延遲)
/*
|------------------
|
|------------------
*/
$oper = $_POST['oper'];//添加操作if($oper === 'add'){ $title = $_POST['title']; $content = $_POST['content']; //如果嚴格按MVC,這裡應該調用model了 $con = mysql_connect('localhost', 'root', '123456'); if(!$con) { die('串連失敗!'); } mysql_select_db('news', $con); $sql = "insert into question(null, '$title', '$content', '')"; if(mysql_query($sql, $con)) { //1.產生靜態檔案 $id = mysql_insert_id(); $html_filename = 'news-id'.$id.'.html'; $html_fp = fopen($html_filename, 'w'); //2.把模板檔案讀取(news.html) $fp = fopen('news.tpl', 'r'); //r 唯讀方式開啟; r+ 讀寫方式開啟; w 寫入方式開啟:檔案內容將被清空!如果檔案不存在將建立; a 以追加的方式開啟 //3.迴圈讀取 //如果沒有讀到檔案的最後,就一直讀取 while(!feof($fp)) { //一行行讀 $row = fgets($fp); //把預留位置替換掉 => 可以自訂完整的替換規則函數 $row = str_replace('%title%', $title, $row);//如果不重新賦值$row, $row值不會改變 $row = str_replace('%content%', $content, $row); fwrite($html_fp, $row);//4.將內容寫入靜態檔案 }
//5.檔案必須關閉 fclose($html_fp); fclose($fp); echo "添加成功。點擊查看新聞!"; } else { die('添加失敗!'); }}//此時在新聞列表內,點擊查看詳情的連結,可以改成產生的靜態頁面地址,直接進入靜態檔案。//news.tpl模板檔案/* %title% %title%
%content%
*/
---------------------------------------------------------------------------------------------
php靜態化頁面方法,偽靜態也可以
這裡是jetee.cn中靜態化會員列表部分,根據這部分代碼,可以理解靜態化的一些概念。
靜態化函數部分
/**
* @get list member item 獲得靜態化模板中要替換變數的內容。
* @param str: To replace the string
* @return string
*/
function get_staticize_replace_str()
{
$replace_str=""; //replace string
$query="select member_id,email_name from member";
$result=Mysql::query($query);
while($row=Mysql::fetch_assoc($result))
{
$replace_str.="
".$row["member_id"]."</li>";
$replace_str.="
".$row["email_name"]."</li>
";
}
return $replace_str;
}
/**
* @替換靜態化模板中的變數產生靜態化頁面。
* @
* @return void
*/
function staticize_list_member()
{
$replace_str=$this->get_staticize_replace_str();
$templet=fopen(TENDAO_DIR."/templets/default/list_member.html","r");
$new_file=fopen(TENDAO_DIR."/member/list_member.html","w");
while(!feof($templet))
{
$ripe=fgets($templet);
$ripe=str_replace("{member_items}",$replace_str,$ripe);
fwrite($new_file,$ripe);
}
if (file_exists(TENDAO_DIR."/member/list_member.html")) {
Msg("靜態化會員列表成功!返回首頁中……",TENDAO_ROOT,0,3000);
exit();
} else {
Msg("靜態化會員列表沒有成功!返回首頁中……",TENDAO_ROOT,0,3000);
}
fclose($templet);
fclose($new_file);
}
/**
* @靜態化模板
* @
......餘下全文>>
php對於頁面靜態化問題
方法很多啊
在php中 用include_once 就可以了
只是包含檔案的時候注意 你分離出去的檔案只有</body>中的部分
再就是看好頁面樣式
好的程式員 會將很多部分分離
這樣便於統一管理
http://www.bkjia.com/PHPjc/851760.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/851760.htmlTechArticlePHP頁面靜態化:真靜態兩種方案,php靜態 ---------------------------------------------------------------------------------------------- 方案1:如果靜態檔案存...