色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

php header 空格

錢瀠龍1年前8瀏覽0評論
PHP Header 不想在輸出任何內容前輸出,可以給我們帶來非常大的便利,但是有時候會遇到意外的問題,比如在輸出 header 時出現了不必要的空格。今天我們將會探究這個問題,并提供一些解決方案。 在我們深入研究之前,讓我們先來看一下 header 的基本語法: ``` header(string $header, bool $replace = true, int $http_response_code = 0) : void ``` 不幸的是,很多 PHP 用戶并沒有意識到這個函數在某些情況下可能會輸出一些空格字符,這真的是一個非常頭疼的問題! 因為 header 是向瀏覽器發送響應頭的一個 PHP 函數,當這些頭信息被接收時,它們會被放置在一個緩沖區中。 緩沖區之后被發送給客戶端,包括所有的 cookies 和 響應體。 許多 PHP 開發人員都發現他們的代碼不使用 cookies 或響應體,但是空格卻不知不覺間被加入到了響應頭。接下來,我們將會了解為什么會發生這種情況以及如何避免它。 header 空格問題的原因 要理解響應頭中空格出現的原因,我們必須先了解輸出緩沖的機制。當緩沖開啟時,所有的輸出字符都不會立即發送到客戶端,而是被放置在一個緩沖區中,以便操縱和處理。 這種機制的好處是可以把輸出代碼分成多個塊,對每個塊做出必要的修改,一次發送全部結果。這可以減少網絡流量,也能降低網頁加載時間。 header 函數實際上不是一個特殊的函數。它只是一個設置 HTTP 響應頭的方式,而且默認是沒有啟用輸出緩沖的。 只有在響應體輸出之前啟用輸出緩沖,才不會出現額外的空格。 // 無緩沖區模式 header('Content-Type: text/plain; charset=utf-8'); echo 'hello'; // 帶緩沖區模式 header('Content-Type: text/plain; charset=utf-8'); ob_start(); echo 'hello'; ob_end_flush(); 如您所見,在第一個例子中,我們的響應輸出是直接發送的。但是,在第二個例子中,ob_start()、echo 和 ob_end_flush() 都在緩沖區中。這種情況會導致 header 字符串被添加到緩沖區中,最終添加了一個額外的字符。 輸出帶空格的 header 為了更好地理解問題的嚴重性,讓我們看看以下代碼片段: header(' Cache-Control: no-cache, must-revalidate'); header('Expires: Sat, 1 Jan 2000 00:00:00 GMT'); header('Pragma: no-cache'); 輸出: Cache-Control: no-cache, must-revalidate Expires: Sat, 1 Jan 2000 00:00:00 GMT Pragma: no-cache 在我們向瀏覽器發送響應頭的時候,這里有一個非常微妙的問題,在 header 頭的前面出現了空格。 雖然這個問題看起來是無害的,但正是因為這個問題導致了所有種類的瀏覽器兼容性問題。 解決 header 頭的空格問題 避免 header 頭在輸出之前帶上空格,可以根據 $_SERVER['SERVER_PROTOCOL'] 的版本來進行調整。$_SERVER['SERVER_PROTOCOL'] 是服務器所使用的 HTTP 版本號,通常是 “HTTP/1.0” 或 “HTTP/1.1”。 以下是可以解決 header 頭空格問題的代碼: $protocol = (isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0'); header($protocol . ' 200 OK'); header('Cache-Control: no-cache, must-revalidate'); header('Expires: Sat, 1 Jan 2000 00:00:00 GMT'); header('Pragma: no-cache'); 使用這個方法,第一個頭信息已包含響應代碼 200 OK ,而不會在其前面添加空格。如此一來,我們的代碼就完美地排除了響應頭空格帶來的風險。 總結 本文中,我們已經了解了 PHP Header 帶空格的問題,并提供了一種可以避免這個問題的方法。最后,請記得檢查您的代碼,以確保不會在不該存在的地方添加空格字符!