日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php中的缓,php中的缓存机制解释

發布時間:2025/3/8 php 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php中的缓,php中的缓存机制解释 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

php緩存的理解,先列出ob系列函數的作用:

ob_start('func') 開啟php緩存,回調函數是對緩存內數據的處理函數

ob_gzhandler 作為 ob_start 的回調函數,對數據進行gz壓縮

ob_implicit_flush(true/false) ?打開或關閉apache緩存,打開apache緩存將直接將數據輸出給用戶瀏覽器,不必用buffer函數手動輸出

flush 將apache緩存區的數據發送出去TCP到用戶瀏覽器

ob_get_contents 獲取緩存內容

ob_get_length 獲取緩存內容長度

ob_get_level 返回緩存級別(每個ob_start將開啟一個重0編號的緩存區)

array ob_get_status() 返回當前緩存機制的一些信息

ob_list_handlers

void ? ?ob_flush ? ? ? ? ? ?送出當前緩存區內容到上一緩存區并保留當前緩存區

void ? ?ob_end_flush ?送出當前緩存區內容到上一緩存區銷毀(關閉)當前緩存區

string ob_get_flush ?送出當前緩存區內容到上一緩存區銷毀(關閉)當前緩存區 并返回緩沖區內容

void ? ?ob_clean ? ? ? ? ? ?清空當前緩沖區內容

void ? ?ob_end_clean ??清空當前緩沖區內容并銷毀(關閉)當前緩存區

string ob_get_clean ? ?清空當前緩沖區內容并銷毀(關閉)當前緩存區 并返回當前緩存區內容

緩存的整個機制如下圖所示:

ob系列函數針對的都是 php bufer這塊

在php buffer中,每一個ob_start都會在php buffer中開啟一塊內存空間,并且支持多級嵌套,嵌套關系如圖

不嵌套的話 "php最終輸出緩存區"就是level0 ,嵌套級別的操作都是對上級緩存空間進行的操作 (level0 的上級緩存是Apache Buffer)

flush 函數是對Apache Buffer進行的操作,刷新Apache Buffer 發送數據走TCP到用戶瀏覽器

PHP Buffer :

在php.ini 中的選項 output_buffer 是控制php buffer的,當output_buffer = On 或者 output_buffer = number(num>0) 默認開啟緩存 ob_start不能控制php buffer

當 output_buffer=0 或者 output_buffer=Off 就是關閉緩存 在腳本中需要 通過 ob_start 函數開啟

output_buffer項不能通過 ini_set進行修改

Apache Buffer:

在php.ini中的選項implicit_flush= On/Off 開啟的話,Apache Buffer中的數據不會緩存而是直接發送出去

ob_implicit_flush(true/ false) 可以對這個選項進行設置

開啟Apache Buffer緩存后要想送出緩存中的數據需要用到函數 flush

很多時候 ob_flush flush 要結合使用:

ob_flush PHP Buffer->Apache Buffer

flush ? ? ? Apache Buffer->Browser

ob_flush ob_end_flush ob_get_flush 都有送出緩存內容的操作,這時的送出緩存都是送出到上一級別的緩存區域 最后一并輸出給Apache Buffer

關于PHP Buffer中的多級緩存:

每個ob_start 函數都會在PHP Buffer中開啟一個緩存區域,php會將這些區域進行編號(從0開始),可以通過 ob_get_level函數獲取編號

緩存嵌套的整個操作是將整個緩存進行合并最后一并發送給Apache Buffer

ob_flush函數是將當前編號內的內容送到上一編號并將php buffer中的內容發送到Apache Buffer

例子1:

ob_start();

echo "buffer1
";

ob_start();

echo "buffer2
";

ob_start();

echo "buffer3
";

ob_end_flush();

echo ob_get_level().'
';

ob_end_flush();

echo ob_get_level().'
';

ob_end_flush();

echo ob_get_level().'
';

輸出內容:

buffer1

buffer2

buffer3

2

1

0

從返回的level值可看出,整個嵌套級別是從后往前的

例子二:

ob_start();

echo "buffer1
";

ob_start();

echo "buffer2
";

ob_start();

echo "buffer3
";

ob_end_clean();

ob_end_flush();

ob_end_flush();

結果:

buffer1

buffer2

不出所料,先將 2 級別緩存的內容clean掉,1 ,0 級別的內容正常輸出

例子三:

ob_start();

echo "buffer1
";

ob_start();

echo "buffer2
";

ob_start();

echo "buffer3
";

ob_end_flush();

ob_end_clean();

ob_end_flush();

結果:

buffer1

從上面的例子可以總結下php緩存機制中嵌套中 整合輸出的過程如下

ob_start(); echo 'buffer1' 緩存如下 0:"buffer1"

ob_start(); echo 'buffer2' 緩存如下 1:"buffer2"---->0:"buffer1"

ob_start(); echo 'buffer3' 緩存如下 2:"buffer3"---->1:"buffer2"---->0:"buffer1"

如例子一中

第一次 ob_end_flush 緩存結構?1:"buffer2buffer3"---->0:"buffer1"

第二次?ob_end_flush 緩存結構 0:"buffer1buffer2buffer3"

第三次?ob_end_flush 緩存結構 發送內容到Apache Buffer

結果:buffer1buffer2buffer3

如例子二中

ob_end_clean?緩存結構?1:"buffer2"---->0:"buffer1"

ob_end_flush?緩存結構 0:"buffer1buffer2"

ob_end_flush 緩存結構 發送內容到Apache Buffer

結果:buffer1buffer2

如例子三中

ob_end_flush 緩存結構?1:"buffer2buffer3"---->0:"buffer1"

ob_end_clean?緩存結構 0:"buffer1"

ob_end_flush 緩存結構 發送內容到Apache Buffer

結果:buffer1

以上清楚的解釋了php中的緩存機制

理解了整個機制,函數的使用就簡單了 Good Luck

總結

以上是生活随笔為你收集整理的php中的缓,php中的缓存机制解释的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。