如何使用ob函數輸出靜態html文件 1、ob函數介紹 1.1、ob_start — 打開輸出控制緩衝 bool ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]] ) 此函數將打開輸出緩衝。當輸出緩 ...
如何使用ob函數輸出靜態html文件
1、ob函數介紹
1.1、ob_start — 打開輸出控制緩衝
bool ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]] )此函數將打開輸出緩衝。當輸出緩衝激活後,腳本將不會輸出內容(除http標頭外),相反需要輸出的內容被存儲在內部緩衝區中。
詳情參考:http://php.net/manual/zh/function.ob-start.php
1.2、ob_get_contents — 返回輸出緩衝區的內容
string ob_get_contents ( void )只是得到輸出緩衝區的內容,但不清除它。
詳情參考:http://php.net/manual/zh/function.ob-get-contents.php
1.3、ob_end_flush — 沖刷出(送出)輸出緩衝區內容並關閉緩衝
bool ob_end_flush ( void )這個函數將送出最頂層緩衝區的內容(如果裡邊有內容的話),並關閉緩衝區。如果想進一步處理緩衝區中的內容,必須在ob_end_flush()之前調用 ob_get_contents(),因為在調用ob_end_flush()後緩衝區內容被丟棄。
詳情參考:http://php.net/manual/zh/function.ob-end-flush.php
1.4、ob_flush — 沖刷出(送出)輸出緩衝區中的內容
void ob_flush ( void )這個函數將送出緩衝區的內容(如果裡邊有內容的話)。如果想進一步處理緩衝區中的內容,必須在ob_flush()之前調用ob_get_contents() ,因為在調用ob_flush()之後緩衝區內容將被丟棄。
此函數不會銷毀輸出緩衝區,而像ob_end_flush() 函數會銷毀緩衝區。
詳情參考:http://php.net/manual/zh/function.ob-flush.php
1.5、ob_get_clean — 得到當前緩衝區的內容並刪除當前輸出緩
string ob_get_clean ( void )得到當前緩衝區的內容並刪除當前輸出緩衝區。
ob_get_clean() 實質上是一起執行了 ob_get_contents() 和 ob_end_clean()。
詳情參考:http://php.net/manual/zh/function.ob-get-clean.php
1.6、ob_get_flush — 刷出(送出)緩衝區內容,以字元串形式返回內容,並關閉輸出緩衝區
string ob_get_flush ( void )ob_get_flush() 刷出(送出)緩衝區內容,以字元串形式返回內容,並關閉輸出緩衝區。
Note: 這個函數與ob_end_flush()相似,不同的是本函數還會以字元串形式返回緩衝區內容。
詳情參考:http://php.net/manual/zh/function.ob-get-flush.php
2、如何使用ob()函數來製作html的靜態頁面
2.1、簡單輸出html文件
<?phpob_start(); //打開緩衝區
$info = 'hello world!!';
$file=fopen('index.html','w'); //打開文件index.html
fwrite($file,$info); //寫入信息到index.html
fclose($file); //關閉文件index.html
?>
輸出hello到index.html
找到index.html,正常輸出了設定的內容
2.2、獲取資料庫信息輸出html文件
<?phprequire_once 'coon.php';
$sql = "select * from name order by id;";
$result = $link->query($sql);
$arr = array();
while($re = $result->fetch(PDO::FETCH_ASSOC)){
$arr[] = $re;
}
//迴圈輸出內容到html文件
ob_start(); //打開緩衝區
?>
<!-- 下麵是輸出的內容 -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>迴圈輸出的html內容</title>
</head>
<body>
<table>
<thead>
<tr>
<td>id</td>
<td>name</td>
<td>pwd</td>
</tr>
</thead>
<tbody>
<?php
foreach ($arr as $key => $value) {
echo "<tr>";
echo "<td>{$value['id']}</td>";
echo "<td>{$value['name']}</td>";
echo "<td>{$value['pwd']}</td>";
echo "</tr>";
}
?>
</tbody>
</table>
</body>
</html>
<?php
$content = ob_get_contents();//得到當前緩衝區的內容
ob_end_clean();//刪除當前輸出緩
file_put_contents('index2.html',$content);//寫入文件
?>
輸出結果到index2.html
Output Control 函數有很多,大致就先介紹這幾種
2.3 優化讀取方式,確定正確讀取指定文件
<?php
$fileName = 'index2.html';
$re = file_exists($fileName);//判斷文件是否存在
$dValue = 0;
if($re){
$fileTime = filectime($fileName);//時間戳
$dValue = time() - $fileTime;//獲取創建時間,文件緩存一般存在有效期
}
if(file_exists($fileName) && $dValue < 3600){
$content = file_get_contents($fileName);
echo $content;
die;
}else{
if($re){
unlink($fileName);//過去先刪除,
}
require_once 'coon.php';
$sql = "select * from name order by id;";
$result = $link->query($sql);
$arr = array();
while($re = $result->fetch(PDO::FETCH_ASSOC)){
$arr[] = $re;
}
//迴圈輸出內容到html文件
ob_start(); //打開緩衝區
?>
<!-- 下麵是輸出的內容 -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>迴圈輸出的html內容</title>
</head>
<body>
<table>
<thead>
<tr>
<td>id</td>
<td>name</td>
<td>pwd</td>
</tr>
</thead>
<tbody>
<?php
foreach ($arr as $key => $value) {
echo "<tr>";
echo "<td>{$value['id']}</td>";
echo "<td>{$value['name']}</td>";
echo "<td>{$value['pwd']}</td>";
echo "</tr>";
}
?>
</tbody>
</table>
</body>
</html>
<?php
$content = ob_get_contents();//得到當前緩衝區的內容
ob_end_clean();//刪除當前輸出緩
file_put_contents('index2.html',$content);//寫入文件
}
?>
首先判斷文件是否存在,如果存在則判斷當前時間 - 創建時間 的時間差,判斷當前文件是否有效。
3、總結
一.是不需要運行在伺服器上,訪問的時候,伺服器只是簡單的返回這個文件給瀏覽器,並不執行任何操作,記憶體占用小,訪問速度快。
二.安全,任何一種動態網站開發語言都不是絕對的安全的,而靜態網頁除了伺服器被黑外,程式不存在任何漏洞