php 緩衝區
這篇文章給介紹的是PHP緩衝區這一部分的知識,現在分享給大家,也給有需要幫助的朋友一個參考,大家一起來看一看吧
什麼是緩衝區?
簡單而言,緩衝區的作用就是,把輸入或輸出的內容先放進記憶體,而不顯示或讀取.至於為什麼要有緩衝區,這是一個很廣泛的問題,
其實緩衝區最本質的作用就是,協調高速CPU和相對緩慢的IO設備(磁碟等)的運作。
想要了解PHP的緩衝區,就要知道執行PHP的時候,緩衝區被設定到了什麼地方。
當執行PHP的時候,如果碰到了echo print_r之類的會輸出資料的程式碼,PHP就會將要輸出的資料放到PHP自身的緩衝區,等待輸出.
當PHP自身的緩衝區接到指令,指示要輸出緩衝區的內容時,將會把緩衝區內的資料輸出到apache上, apache接受到PHP輸出的資料,然後再把該資料存在到apache自身的緩衝區內,等到輸出
當apache接受到指令,只是要輸出緩衝區的內容時, 將會把緩衝區的內容輸出,返回到瀏覽器.由此可見,PHP要輸出資料的時候,將會經過兩個緩衝區(先是自身的,然後是apache的),再返回到瀏覽器.
緩衝區在PHP中起到什麼作用?
1.最常見的就是在使用header函數之前,就已經輸出了某些資料,這樣會導致某些錯誤,例如Cannot modify header information – headers already sent by;
#1 2 |
|
出現這個錯誤的原因是, 在header之前已經輸出了某些數據,而輸出這些數據的同時, apache將會同時發送一個響應狀態到瀏覽器上(既然有輸出,即這個請求是有效的),而其後你又再次使用header函數
發送http頭,則會返回這個錯誤,錯誤的意思是:HTTP頭已經發送出去了,你不能對他再做修改.
為什麼使用緩衝區可以避免這個錯誤呢?
因為header函數是不受緩衝區影響的,當一碰到header函數的時候,PHP馬上執行apache發送這一個http頭都瀏覽器.
而輸出的資料PHP開啟輸出緩衝區後, 這些資料將會存放在緩衝區,等待輸出.這樣就可以避免了之前所發生的錯誤.
2.透過PHP寫檔案下載程式的時候.
為了讓文件下載更安全,同時提高更多的可控性,很多朋友都喜歡用PHP寫文件下載頁面.其原理很簡單,就是通過fwrite把文件內容讀出並顯示,然後通過header來發送HTTP頭,讓瀏覽器知道這是一個附件,這樣
就可以達到提供下載的效果.
如果用上面的辦法提供下載頁面,會碰到一個效率問題,如果一個文件很大,假設為100M ,那麼在不開啟緩衝區輸出的情況下,必須要把100M資料全部讀出,然後一次返回到頁面上,如果這樣做,用戶將會在所有資料讀完
之後才會得到回應,降低使用者體驗感.
如果開啟了輸出緩衝區,當PHP程式讀完檔案的某一段,然後馬上輸出到apache,然後讓apache馬上回到瀏覽器,這樣就可以減少使用者等待時間.那後面的資料怎麼辦呢?我們可以寫一個while循環,一直一段一段地讀取文件
每讀一段,就馬上輸出,直到把文件全部輸出為止,這樣瀏覽器就可以持續地接受到數據,而不必等到所有文件讀取完畢.
另外,該做法還解決了另外一個很嚴重的問題.例如一個文件是100M,如果不開啟緩衝區的情況下,則需要把100M文件全部讀入內存,然後再輸出.但是,如果PHP程式做了內存限制呢?為了保證伺服器的穩定,管理員通常會把PHP的執行
內存設一個限制(通過php.ini總的memory_limit, 其默認值是8M), 也就是每個PHP程式使用的記憶體不能使用超過這個值的記憶體. 假設該值為8M,而要讀入的檔案是100M,根本就沒有足夠的記憶體來讀入該檔案.這個時候,我們就需要用到上面的
辦法來解決這個問題,每次只讀某一段,這樣就可以避免了內存的限制
3.靜態文件緩存
現在很多公司有這麼一個需求, 就是某一個頁面在第一次造訪的時候,會執行PHP,然後把顯示的內容返回到瀏覽器,同時需要把這次顯示的內容保存到伺服器上,這樣下次訪問的時候,就直接把保存在伺服器上的檔案直接顯示,而不需要透過PHP來做操作
這就是所謂的」靜態頁面快取」.那怎麼樣才能做到把內容回傳到瀏覽器的同時把資料儲存到伺服器上呢?這就要用到輸出緩衝區了.
#1 ##2##3 #4 5 6 |
|
#1 2 3 4 5 |
|
4.在apache中,如果你開啟了mod_gzip的壓縮模組,這樣可能會導致你的flush函數刷新不成功,其原因是,mod_gzip有自己的輸出緩衝區,當php執行了flush函數,指示apache刷新輸出緩衝區,但是內容需要壓縮,apache就把內容輸出到自身的mod_gzip模組,mod_gzip也有自身的輸出緩衝區,他也不會馬上輸出,所以造成了內容不能馬上輸出.為了改善這個情況,可以關閉mod_gzip模組,或在httpd.conf增加以下內容,以禁止壓縮
|
以上是php 緩衝區的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。
