1. 程式人生 > >PHP Header失效的原因分析

PHP Header失效的原因分析

在PHP中用header("location:test.php")進行跳轉要注意以下幾點:
1、location和“:”號間不能有空格,否則會出錯。
2、在用header前不能有任何的輸出,包括include的頁面中標籤“?>”後不能有空格!!
3、header後的PHP程式碼還會被執行。

續:
問題:header函式前輸入內容
一般來說在header函式前不能輸出html內容,類似的還有setcookie() 和 session 函式,這些函式需要在輸出流中增加訊息頭部資訊。如果在header()執行之前有echo等語句,當後面遇到header()時,就會報出 “Warning: Cannot modify header information – headers already sent by ….”錯誤。就是說在這些函式的前面不能有任何文字、空行、回車等,而且最好在header()函式後加上exit()函式。例如下面的錯誤寫法,在 兩個php程式碼段之間有一個空行:

<?php
//some code here
?>
//這裡應該是一個空行
<?php
header(“http/1.1 403 Forbidden”);
exit();
?>
原因:
PHP指令碼開始執行 時,它可以同時傳送http訊息頭部(標題)資訊和主體資訊. http訊息頭部(來自 header() 或SetCookie() 函式)並不會立即傳送,相反,它被儲存到一個列表中. 這樣就可以允許你修改標題資訊,包括預設的標題(例如Content-Type 標題).但是,一旦指令碼傳送了任何非標題的輸出(例如,使用 HTML 或 print()呼叫),那麼PHP就必須先發送完所有的Header,然後終止 HTTPheader.而後繼續傳送主體資料.從這時開始,任何新增或修改Header資訊的試圖都是不允許的,並會發送上述的錯誤訊息之一。

解決辦法:
修改php.ini開啟快取(output_buffering),將output_buffering=0修改成output_buffering=4096
或 者在程式中使用快取函式ob_start(),ob_end_flush() 等。原理是:output_buffering被啟用時,在指令碼傳送輸出時,PHP並不傳送HTTPheader。相反,它將此輸出通過管道(pipe) 輸入到動態增加的快取中(只能在PHP4.0中使用,它具有中央化的輸出機制)。你仍然可以修改/新增header,或者設定cookie,因為 header實際上並沒有傳送。當全部指令碼終止時,PHP將自動傳送HTTP header到瀏覽器,然後再發送輸出緩衝中的內容。

相關推薦

PHP Header失效原因分析

在PHP中用header("location:test.php")進行跳轉要注意以下幾點: 1、location和“:”號間不能有空格,否則會出錯。 2、在用header前不能有任何的輸出,包括include的頁面中標籤“?>”後不能有空格!! 3、hea

Oracle生產中跑批存儲過程或函數失效原因分析以及解決方案

nap rbm apt state tbb cap vsx oracl fig p,li { white-space: pre-wrap } Oracle生產中跑批存儲過程或函數失效原因分析以及解決方案: 報錯信息: 原因分析: 1.當我們編譯存儲過程或函數時,該過程

Hibernate @Column 註解失效 原因分析

最今寫一個Java小專案,有一個問題讓我苦惱了兩天,@Column(name="num")類似這樣的註解死活沒有效果, @AttributeOverride(name = "uuid", column [email protected](name="user_id

關閉瀏覽器後Session失效原因分析

1.從伺服器的角度看:session的壽命週期預設是30分鐘,這裡指的是某個session物件在服 務器中的記憶體中的壽命。 2.從瀏覽器的角度看:當我們的瀏覽器首次訪問伺服器的某個servlet的時候會建立一個新的session物件(如果這個被訪問的servlet有獲取session物件的語句) 後會把此s

Respond.js在IE8失效原因分析

最近在專案中使用了Bootstrap,而且專案要求相容IE8。專案中使用bootstrap的預設樣式,然後在此基礎上另外使用一個css檔案編寫自定義的樣式。原本以為在頁面中加入Respond.js可以讓Bootstrap的樣式在IE8下自動解析出來,但是發現有的

SWT中setBounds/setSize方法失效原因分析

最近這幾天一直在看SWT的東西,沒有買書,在網上看別人的帖子,blog,論壇。 總結的一點東西放在自己的blog裡,方便查詢。 這裡是SWT中setBounds方法失效原因分析 1: 跟控制元件所處的容器的佈局有關,比如那個按鈕在一個面板裡,而面板的佈局是充滿式佈局,或者卡

PHPWAMP亂碼一鍵解決,PHP亂碼通用解決方案/網站亂碼的多種原因分析

php亂碼 亂碼解決方案 php亂碼原因分析 所有引起網頁亂碼的原因,我將其劃分以下五大類1、服務器強制編碼造成的亂碼(此亂碼的表現:通常只會引起某個PHP版本亂碼(因為默認配置不同),建議使用PHPWAMP內置的常用工具萬能亂碼修復器,該修復器可以一鍵解決多種亂碼情況)2、頁面編碼聲明和頁面文檔

PHP返回頁面空白原因分析-Nginx+PHP

問題處理分析過程: Nginx通過FastCGI接口將PHP頁面文件傳遞給PHP-FPM管理器處理 PHP-FPM調用PHP環境解析後返回響應數據給Nginx 用戶呈現頁面 問題原因羅列:1、Nginx配置錯誤,未將要解析的PHP頁面傳遞給PHP環境解析,請詳細檢查配置2、是否關閉Selinux文件控制,

PHP switch分支語句中省略break後還會執行其他case的原因分析

請分析以下PHP程式碼的輸出結果: $a= 'dog'; switch($a) { case 'cat': echo "\$a is cat"; case 'dog': echo "\$a is dog"; case 'pig': echo "\$a is pig"

mac下多版本php php-fpm安裝失敗的原因分析

一般情況下php-fpm安裝失敗的解決方案可以參考我的上一篇文章 連線 但是,還是會提示error-log檔案找不到。可是,明明已經將/private/etc/php-fpm.conf檔案中的error-log配置修改過了啊。 原因是:/private/etc/php-fpm.co

關於PHPPHP-FPM程序CPU 100%的一些原因分析和解決方案

之前碰到過php-fpmCPU高達80%-90%,特此記錄下 1. 檢視是否是硬體問題   方式:top  命令   主要檢視:load average(平均負載),這是一個4核8G記憶體的伺服器   1分鐘平均負載:2.32;   5分鐘平均負載:2.18;   15分鐘平均負載:3.95;   loa

php Session失效原因

最近公司的專案出現了一個Session失效的問題,程式執行之後,session不到幾分鐘就失效了。後來在網上看了很久,瞭解了它的機理:Session在lunix裡面是儲存在公共的路徑裡面,這就會導致一個問題,如果程式裡面有很多的Session應用,就會相互的影響。    後

【linux】ARM開發板上設定RTC時間,斷電重啟後,設定失效原因分析

問題描述 linux中使用date設定時間後用hwclock -w同步到RTC,斷電重啟後,有時會失效 原因分析 儲存時間戳 1、使用命令關機(halt)會呼叫rc0.d中的指令碼; 2、使用命令重啟(reboot)會呼叫rc6.d中的指令碼;

epoll驚群原因分析

all lec 水平 next log lag 到來 delayed eas 考慮如下情況(實際一般不會做,這裏只是舉個例子): 在主線程中創建一個socket、綁定到本地端口並監聽 在主線程中創建一個epoll實例(epoll_create(2)) 將監聽socket添

公司網絡很慢很卡的原因分析與處理

網絡問題分析與解決方案一、電腦網速突然變的很慢、很卡,怎麽辦1. 如果你是用的無線路由器,不管你有沒有設置無線密碼,都有可能被別人盜用你的網絡,可以關掉無線功能,自已用有線連接上網 2. 如果還不行,那麽啟路由器,有貓的話也要重啟,再試試 3. 如果你的路由器用的時間超過一年,質量不好的話可能內部的部件已經老

修改hosts不立即生效原因分析

real 專註 開始 image 下載 when 顯示 方法 做了 我們經常也遇到修改hosts不生效的情況,而且有時生效,有時不生效的情況也有發生,這到底是為什麽呢? 起:DNS緩存機制 關於DNS緩存的機制,有一篇非常詳細的文章What really happens w

SQL Server 磁盤請求超時的833錯誤原因分析以及解決

ger ssa sage blog htm 好的 發生 如何 tle 本文出處:http://www.cnblogs.com/wy123/p/6984885.html 最近遇到一個SQL Server服務器響應極度緩慢,並且出現客戶端請求報錯的情況,在數

記一次OGG數據寫入HBase的丟失數據原因分析

hat xdg column 安裝 tint b- 主鍵 取余 bst 一、現象二、原因排查2.1 SparkStreaming程序排查2.2 Kafka數據驗證2.3 查看OGG源碼2.3.1 生成Kafka消息類2.3.2 Kafka配置類2.3.3 Kafka 消息發

AppStore IPv6-only審核被拒原因分析及解決方案

穩定 eip ios 穩定性 only 應用服務器 http 一個 搭建 AppStore IPv6-only審核被拒原因分析及解決方案 http://www.jianshu.com/p/8edfdfa20b29 自2016年6月1日起,蘋果要求所有提交App St

SDK環境變量配置及adb不是內部或外部命令原因分析

form 如何 環境變量配置 無法 設置 添加 and 是否 排除 一、 1、SDK下載:http://tools.android-studio.org/index.php/sdk/ 建議下載zip格式文件,下載解壓即可 2、在解壓的SDK文件,找到“platform-to