文章出處

首先明白php實現頁面靜態化是將php文件生成相應的.shtml文件,那.shtml是什么文件呢?

包含有嵌入式服務器方包含命令的HTML(標準通用標記語言下的一個應用)文本。在被傳送給瀏覽器之前,服務器會對SHTML文檔進行完全地讀取、分析以及修改。

以下是實例代碼:

 <meta charset="utf-8" http-equiv="content-type" />
 <?php
	
	//首先查看緩存文件
	if(file_exists("static.html")){
		//緩存時間為3分鐘
		if(time()-filemtime("static.html")<60*3){       //當前時間減去static.html生成時間,也就是當超過180s,則進行更新一遍
			//將靜態文件內容返回給客戶端
			$start_time = microtime();
			echo "我是從靜態文件中讀取的數據:"."<br/>";
			echo file_get_contents("static.html");
			$end_time   = microtime();
			echo "靜態文件使用時間:".($end_time-$start_time);
			exit;
		}
	}
	//如果是首次訪問,或者是上次緩存的時間超過3分鐘,則從數據庫中讀取數據
	$host     = "127.0.0.1";
	$user     = "root";
	$password = "yuyouwen";
	//記錄開始時間
	$start_time = microtime();
	mysql_connect($host,$user,$password);
	mysql_select_db("shucai");
	mysql_query("set names utf8");
	
	$sql 		= "SELECT username,password FROM admin";
	$resource 	= mysql_query($sql);
	echo "我是從數據庫中讀取的數據:<br/>";
	ob_start();//打開輸出緩沖
	echo "<table border='1'><tr><th>姓名</th><th>地址</th></tr>";
	//輸出取得的信息
	while($userInfo = mysql_fetch_assoc($resource)){
		echo "<tr>";
		echo "<td>".$userInfo['username']."</td>";
		echo "<td>".$userInfo['password']."</td>";
		echo "</tr>";
	}
	$end_time=microtime();
	$str=ob_get_contents();//獲取緩沖區的內容
	ob_end_flush();
	
	echo "從數據庫讀數據的時間:".($end_time-$start_time);
	
?>

  代碼其實生成的是html文件,這時在 file_put_contents("static.html",$str);

  中的static.html改成static.shtml也行

 還有要說明的是,頂部一行代碼是編碼的格式,少了這行會出現亂碼,即中文不能正確顯示,


 

結果說明:

index.php頁面的結果:

static.html頁面的結果:

file_put_contents("static.html",$str); 中獎static.html改成static.shtml后的結果:

結果是shtml 識別不了html 的格式是不是啊?還是ssi未打開的問題還是什么的?解決了再回來更新


 

 

更新

因為獲得的static.html頁面是從緩沖區獲得,所以也就是沒有字符編碼格式,后來在 echo "<table border='1'><tr><th>姓名</th><th>地址</th></tr>"; 的前面加入一行

echo "<meta charset='utf-8' http-equiv='content-type' />";

則字符編碼顯示正確:

接下來解決的是生成shtml的問題


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()