亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php如何關閉緩沖區

發布時間:2021-09-29 09:52:05 來源:億速云 閱讀:320 作者:小新 欄目:編程語言

這篇文章主要介紹php如何關閉緩沖區,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

php關閉緩沖區的方法:1、打開PHP安裝目錄,找到并打開配置文件“php.ini”;2、在配置文件中,找到“output_buffering”項,將該項的值設置為“Off”即可。

本教程操作環境:windows7系統、PHP7.1版,DELL G3電腦

PHP 緩沖區(buffer)

腳本輸出信息首先放入buffer,只有當buffer滿了或者腳本運行完畢,數據才會往下一階段轉移。在配置文件php.ini可以找到output_buffering設置項,我的默認配置(Windows/XAMPP v3.2.2)是4096

php如何關閉緩沖區

若設置成On,緩沖區可用且無大小限制;

若設置為Off,緩沖區不可用;

若設置為整數,緩沖區可用且為設置大小,單位字節

需要注意的是,ini_set無法設置buffer大小,在初始化腳本運行環境時,已經做好了buffer的定義;cli模式下始終默認output_buffering為Off。

那么問題來了,緩沖區關閉和打開有什么區別?緩沖區初始設置的大小有什么作用?cli模式默認關閉若業務需要能開啟嗎?緩存區存在有什么好處?

1.      緩沖區關閉和打開有什么區別?

通過代碼檢驗

output_buffering配置為4096時,運行代碼

php如何關閉緩沖區

輸出結果:在等待3秒鐘后,同時輸出了start和end

Output_buffering配置為Off時,運行相同代碼

輸出結果:先輸出了start,等待3秒鐘后,輸出了end

單一看結果一模一樣啊~但是觀察其運行過程發現了很驚訝的不同點。若緩沖關閉,先輸出“start”,等待3秒后再輸出“end”。而緩沖開啟,會等待腳本執行完成,一并輸出結果

這個例子中,flush用于刷新apache的緩沖區,類似讓PHP buffer與瀏覽器建立直接聯系,好讓我們的注意力能夠專注PHP buffer本身。

通過一個形象的例子比喻,PHP的緩沖區像一個大房子,每次echo等輸出函數執行時,將數據扔到這個大房子里,直到腳本執行完成或執行ob_flush函數,將數據從大房子中釋放,扔給了WebServer緩沖區。關閉了PHP緩沖區后,echo函數執行,沒有大房子可以放怎么辦呢,就只好直接交給WebServer緩沖區了。

通過例子和代碼執行結果,我們能夠明白,所謂PHP buffer,是PHP本身開辟的數據存儲中樞站,一系列的ob函數都是為此操作。(舉幾個例子函數)

ob_clean();            //刪除內部緩沖區的內容,不關閉緩沖區(不輸出)。

ob_end_clean();        //刪除內部緩沖區的內容,關閉緩沖區(不輸出)。

ob_get_contents();     //返回緩沖區的內容,不輸出

ob_get_length();       //返回內部緩沖區的長度,如果緩沖區未被激活,該函數返回FALSE。

2.      緩沖區初始設置的大小有什么作用?

將output_buffering從4096改為5,方便執行測試

執行代碼

php如何關閉緩沖區

輸出說明:等待3秒后,輸出1234end

執行代碼

php如何關閉緩沖區

輸出說明:輸出12345,等待3秒后,輸出end

通過輸出的比較,很能說明區別了。

緩沖區只能放5字節的數據,放進來的小于這個最大值,還能先存存放放,要是大于等于臨界值,那就只好將數據踢出去了,這就跟我們手動執行了ob_flush函數一個效果。

3.      cli模式默認關閉若業務需要能開啟嗎?

這個問題可以做個補充,非cli模式下,如果php.ini設置緩沖區關閉,但是業務需要用到buffer,咋整呢,難不成還要去改配置。當然不會那么難搞了,這時候又一個ob函數來了,

ob_start();            //打開一個輸出緩沖區,所有的輸出信息不再直接發送到瀏覽器,而是保存在輸出緩沖區里面。

知道了PHP buffer類似數據臨時存儲區的概念,回過頭再來看看TP5源碼。

php如何關閉緩沖區

先看看ob_get_level和ob_get_clean函數解釋

ob_get_level() :返回輸出緩沖機制的嵌套級別。

ob_get_clean():得到當前緩沖區的內容并刪除當前輸出緩沖區。

從代碼中也能得知一二,若level獲取大于0,獲取緩沖區的內容并刪除緩沖區,再通過ob_start打開一個新的,這也很符合注釋里說明的“重新申請”。

這里解釋下所謂的嵌套,至于level的值啥時候會為0,并且非0的話是什么呢,請將php.ini output_buffering關閉,輸出看看結果。另外多次ob_start,多次ob_get_level,來試試對比輸出結果吧。

先來看看兩種模型

php如何關閉緩沖區

php如何關閉緩沖區

在多次ob_start打開新的緩沖區時,數據結構的構造為第二種,這就是嵌套了。ob_get_level返回了嵌套的級別。

個人理解,嵌套可以套用Java的流機制來類比,一個緩沖區的數據輸出到下一個緩沖區,然后可以對數據做定制化的操作。

現在看TP5源碼,思路就比較清晰了。如果系統初始化了緩沖區,因為大小可能會有限制,所以先刪除再重新打開。而執行ob_start打開的緩存區,它的大小“足夠大”,但是到底有多大,暫時沒有查到具體的說明,只知道,不管寫入數據多大,都會直到腳本結束才會發送

4.      緩存區存在有什么好處?

PHP輸出數據發送到WebServer,若echo執行一次發送一次,這加大了資源消耗,不如存儲在內存中,統一發送更有效率。

Web請求包含HTTP頭部,頭部在設置之前不能有任何的輸出。PHP緩沖區替我們做好了這步工作,在頭部發送前輸出各種數據,緩沖區會先將頭部信息發送到WebSever,再統一發送數據報文。

以上是“php如何關閉緩沖區”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

江门市| 新昌县| 鹿邑县| 嘉义县| 府谷县| 鄂托克前旗| 青州市| 嵊泗县| 永寿县| 怀来县| 成安县| 贵港市| 长泰县| 嘉义县| 安陆市| 介休市| 延吉市| 韩城市| 喜德县| 思南县| 和平县| 保康县| 墨玉县| 凭祥市| 伊吾县| 正镶白旗| 德安县| 文山县| 陕西省| 乌拉特前旗| 荔浦县| 瓮安县| 长乐市| 遵义县| 东宁县| 阳谷县| 吐鲁番市| 眉山市| 岚皋县| 宝山区| 新巴尔虎右旗|