成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何解決PHP無法修改header信息問題

開發 后端
PHP無法修改header信息這一問題在我們實際編程中是經常會遇到的。在本文中,我們總結了幾種處理方法,希望對大家有所幫助。

在實際使用PHP語言的時候,通常都會遇到一些錯誤。當然,我們不能因為這些錯誤而認為PHP語言不好用。發現問題,解決問題才能真正的掌握到你所學知識的真諦。#t#

比如以下這段PHP無法修改header信息的錯誤警告:

Warning: Cannot modify header information - headers already sent by

我們在剛剛開始編寫PHP程序的時候,可能都遇到過這個問題。從字面上面看,意思是:

警告:不能修改header信息-headers已經發送。。。

那么是什么原因出現這個PHP無法修改header信息警告的呢!

就是當我們在header()或者setcookie()函數之前,有輸出內容了,比如:

 

  1. < ?PHP  
  2. echo "hello";  
  3. header("content-type:
    text/html;charset:utf-8");  
  4. ?> 

 

上面的代碼就會出現警告!

為什么在header和setcookie之前有任何的輸出就會有警告錯誤呢!如果你了解了PHP的處理過程就很容易理解了!

那PHP是怎么處理PHP無法修改header信息的呢?

當腳本有任何輸出的時候(第一次輸出) PHP會先發送header信息給客服端 然后發送輸出內容,(即http協議中的主體內容)這是如果你就不可能對已經發送的header信息進行任何的修改了,所以我們就不可能利用header 和setcookie等修改header的函數做任何事情了!

那我們來如果解決PHP無法修改header信息這個問題呢!

第一種方法很簡單!就是盡量避免在header和setcookie之前有任何的輸出內容。盡量將他們寫在前面。

第二種解決辦法就是利用PHP的outbuffer 輸出緩沖,PHP的輸出緩沖是這樣的 ,將當前腳本的所有輸出內容都放到outbuffer里面,當程序執行完畢之后 將header和outbuffer一并發送給客戶端。

有兩種做法 一種是在PHP.ini中開啟outbuffer output_buffering默認值為0 可以設置為Off或者On 如果要限制輸出緩沖區的最大值,可將該選項設定為指定的最大字節數(例如 output_buffering=4096)。

另一種PHP無法修改header信息方法是在PHP腳本中做開啟:

在程序的開始出或者公共文件開始處 調用函數ob_start();

這樣我們就開啟了PHP的輸出緩沖 下面我們就可以做任何操作了

 

  1. < ?PHP   
  2. ob_start();  
  3. echo "dfdfd";  
  4. //注意不能卸載ob_start() 前面  
  5. header("content-type:text/
    html;
    charset=utf-8");  
  6. setcookie();  
  7. ?> 

 

如果要開始gzip 可以為ob_start添加ob_gzhandler回調函數 ob_start("ob_gzhandler");

關于outbuffer還有一些函數:

ob_flush()
發送output buffer(輸出緩沖)

ob_end_flush()
發送output buffer(輸出緩沖)并禁用output buffering機制。

ob_end_clean()
清除output buffer但不發送,并禁用output buffering。

ob_get_contents()
將當前的output buffer返回成一個字符串。允許你處理腳本發出的任何輸出。

ob_get_clean()
將當前的output buffer返回成一個字符串。允許你處理腳本發出的任何輸出,并禁用output buffering機制。

還有一些函數可以參考PHP手冊 搜索ob_

  1. < ?PHP  
  2. ob_start();  
  3. print "Here's a pretty dumb way 
    to calculate the length of a string.";  
  4. $length = strlen(ob_get_content());  
  5. ob_end_clean();  
  6. ?> 

這個PHP無法修改header信息例子顯示了一個效率很低的確定字符串長度的方法。它不是簡單的使用strlen()函數處理,而是先啟用 output buffering 機制,將字符串打印出來,然后再確定output buffer的長度。最后清除output buffer(并沒有發送),然后禁用output buffering機制。

責任編輯:曹凱 來源: 百度博客
相關推薦

2017-08-02 15:51:24

PHP中文亂碼

2010-08-25 13:06:53

IP地址故障

2012-09-05 11:09:15

SELinux操作系統

2010-10-08 11:41:38

PHP連接MYSQL

2010-08-26 08:56:34

2011-06-16 14:12:30

Qt Mysql 驅動

2010-04-29 17:46:31

Oracle死鎖

2016-12-13 11:34:10

2009-02-17 14:46:41

linux網卡無法激活

2019-03-20 10:35:53

附近共享Windows 10運行

2015-07-14 10:54:50

PHP數據循環內存耗盡

2011-08-29 10:34:00

網絡安全云安全云計算

2021-06-06 13:05:15

前端跨域CORS

2011-03-23 14:42:47

CPU過度消耗

2017-10-17 09:21:06

2010-07-16 13:52:26

telnet漏洞

2023-10-30 18:35:47

MySQL主從延時

2017-07-20 07:30:16

大數據數據互聯網

2024-10-29 16:41:24

SpringBoot跨域Java

2013-05-21 10:49:59

Windows硬件沖突
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美精品在线一区二区三区 | 一区二区三区免费网站 | 国产1区2区3区 | 日韩精品一区二区三区 | www.久久久久久久久久久 | 亚洲精品在线观看视频 | av乱码| 久久久久免费精品国产小说色大师 | 国产精品v | 91精品国产一二三 | 我要看免费一级毛片 | 免费特级黄毛片 | 一级毛片视频 | 黄a在线观看 | 在线观看午夜视频 | 久久综合伊人一区二区三 | 亚洲一区视频 | 性福视频在线观看 | 婷婷成人在线 | 精品视频一区二区三区在线观看 | 亚洲精品中文在线观看 | 人操人人 | 国产一区二区精品在线观看 | 亚洲一区在线日韩在线深爱 | 羞羞视频一区二区 | 亚洲+变态+欧美+另类+精品 | 国产精品高潮呻吟久久av野狼 | 精品久久99 | av国产精品毛片一区二区小说 | 欧美日韩高清 | 国产成人99av超碰超爽 | 国产精品无码久久久久 | 欧美日韩在线看 | 亚洲狠狠丁香婷婷综合久久久 | 国产一级片免费看 | 一本一道久久a久久精品蜜桃 | 精品国产一区二区三区久久久久久 | 一区二区三区成人 | 欧美久操网 | 黄色免费在线观看网址 | 免费不卡一区 |