如何使用ob函數輸出靜態html文件

来源:http://www.cnblogs.com/ImCehnyx/archive/2017/07/10/7147931.html
-Advertisement-
Play Games

如何使用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文件

<?php
ob_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文件

<?php
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);//寫入文件
?>
輸出結果到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、總結

一.是不需要運行在伺服器上,訪問的時候,伺服器只是簡單的返回這個文件給瀏覽器,並不執行任何操作,記憶體占用小,訪問速度快。

二.安全,任何一種動態網站開發語言都不是絕對的安全的,而靜態網頁除了伺服器被黑外,程式不存在任何漏洞


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Internet上有著極其龐大的資源信息,各行各業的信息無所不有。網頁的信息搜集就是獲取網頁的數據,然後通過程式分析,將有用的數據提取分離出來。搜索引擎工作的一部分就是網頁數據抽取。比如編製程式抽取新浪網新聞頻道里的這個新聞的標題就是一種網頁數據抽取。 獲取網頁數據有很多種方式。網頁信息收集器可以很 ...
  • 一個基於Dapper的自定義分頁實現,支持篩選,排序,結果集總數,非存儲過程實現。 ...
  • 相關文章:EF查詢百萬級數據的性能測試--單表查詢 一、起因 上次做的是EF百萬級數據的單表查詢,總結了一下,在200w以下的數據量的情況(Sql Server 2012),EF是可以使用,但是由於查詢條件過於簡單,且是單表查詢,EF只是負責生成Sql語句,對於一些簡單的查詢,生成Sql語句的時間可 ...
  • 1、string.Empty和“”的區別 這兩個都是表示空字元串。只不過""理論上重新開闢記憶體空間,而String.Empty指向一處。不過優化器會優化的! string.Empty 不分配存儲空間, "" 分配一個長度為空的存儲空間,所以一般用string.Empty,為了以後跨平臺,還是用str ...
  • access_token是公眾號的全局唯一介面調用憑據,公眾號調用各介面時都需使用access_token。開發者需要進行妥善保存。access_token的存儲至少要保留512個字元空間。access_token的有效期目前為2個小時,需定時刷新,重覆獲取將導致上次獲取的access_token失 ...
  • 先上代碼: 測試類: 調用方法: 通過例子實踐證明得到: 1.靜態構造函數先於構造函數執行。 2.靜態構造函數只執行一次。 ...
  • 接上篇, HttpPost 請求 1、post請求,單參數 前端 var url = 'api/EnterOrExit/GetData2'; var para = {}; para["Phone"] = "phone13880825221"; para["UID"] = "uid287572292" ...
  • webapi主要的用途就是把【指定的參數】傳進【api後臺】,api接收到參數,進行【相應的業務邏輯處理】,【返回結果】。所以怎麼傳參,或者通俗的說,http請求應該怎麼請求api,api後臺應該怎麼寫,才能準確的接收到參數。 HttpGet 請求 1、get請求,單參數 前端ajax var ur ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...