### ob緩沖的介紹
- ob緩沖是服務器向客戶端響應數據時,存儲響應數據的臨時空間
- 服務器在向客戶端推送數據之前,不是一次性把所有的數據都給客戶端(cli模式除外),而是先push到ob緩沖區域,然后在一點一點給客戶端,減輕服務器的壓力。
### 開啟ob緩沖
- 在php.ini的配置文件中,通過output_buffering參數進行配置
```
putput_buffering
- off: 表示關閉php輸出緩沖
- on: 表示打開無限大的輸出緩沖
- 4096: 表示打開大小為4096Byte的輸出緩沖
```
- 在程序中動態的開啟緩沖功能`ob_start()`
- 通過php.ini打開,則作用于所有php頁面,使用函數手動打開,則只能作用與當前頁面
### php輸出順序
- 打開ob緩沖:echo,print --> php ob緩沖 --> 服務器緩沖 --> 瀏覽器緩沖 --> 頁面展示
- 關閉ob緩沖:echo,print --> 服務器緩沖 --> 瀏覽器緩沖 --> 頁面展示
```
ob緩沖的知識點
1. 在服務中,如果我們開啟了ob 緩沖,則echo出來的數據首先會放入ob中
2. 當php頁面執行到最后,則會把ob緩沖的數據,刷新到服務器的緩沖中,然后通過服務器對數據封裝成http響應包,返回給瀏覽器
3. 如果沒有開啟ob,所有數據直接發送到服務器緩沖中
```
### ob緩沖相關函數
- ob_start() 開啟ob緩沖
- ob_clean() 清空緩沖區域
- ob_get_contents() 獲取緩沖區域里面的內容
- ob_get_length() 獲取緩沖區域的長度
- ob_get_clean() 獲取緩沖區域內容,并清空緩沖區域
- ob_flush() 將緩沖區域的內容發送到服務器
- ob_end_flush() 將緩沖區域內容大宋到服務器,并關閉緩沖
- on_end_clean() 清空緩沖區域內容,并關閉緩沖
- ob_implicit_flush(true/false) 函數強制有輸入時立即發送到瀏覽器。
### 頁面靜態化
- 數據庫緩存減輕了數據庫壓力,但是服務器的壓力還是存在的
- 頁面靜態化減輕了服務器和數據庫的壓力
- 使用頁面靜態化,查詢比較頻繁,且內容不經常更新的頁面。數據經常變化的頁面不適合頁面靜態化
- 關鍵代碼
```
if(is_file('index.html') && (time() - filemtime('index.html') < 300)) {
// 設置緩沖的失效時間,如果靜態文件沒有失效,則直接輸出靜態文件
require_once('index.html')
} else {
// todo 處理數據
ob_start()
// 模板文件
requrie_once('template.php')
// 將緩沖中的數據,保存在靜態文件
file_put_contents('index.html', ob_get_contents())
}
```
- linux 基礎
- ln 鏈接
- linux 環境變量
- linux 進程查看
- nginx
- redis
- redis 安裝
- php 底層原理
- php源碼編譯安裝
- phpize文件
- php命令行
- php7 新特性
- php7 變量
- php7 生命周期
- php sapi運行模式
- php 內存管理
- php 運行機制和Zend虛擬機
- php垃圾回收
- php 基礎
- php.ini
- php函數
- 面向對象
- php 文件上傳
- ob緩沖和頁面靜態化
- php中的session
- php cURL擴展
- composer 應用
- php 錯誤和異常
- thinkphp
- tp6容器和依賴注入
- tp6 的服務
- tp6事件
- tp6 多應用
- tp6路由
- tp6 cache
- tp6 request
- tp6 中間件
- tp6 response
- tp6 Db
- 備忘錄
- 數據庫表