程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP頁面靜態化:真靜態的兩種方案,php靜態

PHP頁面靜態化:真靜態的兩種方案,php靜態

編輯:關於PHP編程

PHP頁面靜態化:真靜態的兩種方案,php靜態


----------------------------------------------------------------------------------------------

方案1:如果靜態文件存在,且生成時間30秒內,直接返回靜態頁面(有時間延遲)
/*
|------------------
| <www.chenwei.ws>
|------------------
*/
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 '<head><meta http-equiv="content-type" content="text/html;charset=utf-8" /></head>'; echo '<table>; echo '<tr><td>問題詳細內容</td></tr>'; echo "<tr><td>標題:{$row['question_title']}</td></tr>"; echo "<tr><td>詳細:{$row['question_detail']}</td></tr>"; echo '</table>'; $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:使用模板替換技術(沒有時間延遲)
/*
|------------------
| <www.chenwei.ws>
|------------------
*/
$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 "添加成功。<a href='newslist.php'>點擊查看新聞!</a>"; } else { die('添加失敗!'); } } //此時在新聞列表內,點擊查看詳情的鏈接,可以改成生成的靜態頁面地址,直接進入靜態文件。 //news.tpl模板文件 /* <html> <head> <meta charset="utf-8" /> <title>%title%</title> </head> <body> <h1>%title%</h1> <pre>%content%</pre> </body> </html> */

---------------------------------------------------------------------------------------------


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.="<li>".$row["member_id"]."</li>";
$replace_str.="<li>".$row["email_name"]."</li><br>";
}
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></body>中的部分
再就是看好頁面樣式
好的程序員 會將很多部分分離
這樣便於統一管理
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved