這篇文章主要為大家展示了“php中setcookie報(bào)錯(cuò)的解決方法”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“php中setcookie報(bào)錯(cuò)的解決方法”這篇文章吧。
創(chuàng)新互聯(lián)主要為客戶提供服務(wù)項(xiàng)目涵蓋了網(wǎng)頁視覺設(shè)計(jì)、VI標(biāo)志設(shè)計(jì)、營銷網(wǎng)站、網(wǎng)站程序開發(fā)、HTML5響應(yīng)式網(wǎng)站建設(shè)、成都做手機(jī)網(wǎng)站、微商城、網(wǎng)站托管及網(wǎng)站維護(hù)、WEB系統(tǒng)開發(fā)、域名注冊(cè)、國內(nèi)外服務(wù)器租用、視頻、平面設(shè)計(jì)、SEO優(yōu)化排名。設(shè)計(jì)、前端、后端三個(gè)建站步驟的完善服務(wù)體系。一人跟蹤測(cè)試的建站服務(wù)標(biāo)準(zhǔn)。已經(jīng)為成都人造霧行業(yè)客戶提供了網(wǎng)站營銷推廣服務(wù)。
php setcookie報(bào)錯(cuò)是因?yàn)閟etcookie()之前有輸出,其解決辦法就是將輸出的echo的數(shù)據(jù)和header頭的cookie一起發(fā)出去即可。
本文操作環(huán)境:windows7系統(tǒng)、PHP7.1版,DELL G3電腦
php setcookie 報(bào)錯(cuò)怎么辦?
PHP setcookie()之前不能有任何輸出
PHP的setcookie函數(shù),手冊(cè)里是這么寫的:
setcookie() defines a cookie to be sent along with the rest of the HTTP headers. Like other headers, cookies must be sent before any output from your script (this is a protocol restriction). This requires that you place calls to this function prior to any output, including <html> and <head> tags as well as any whitespace.
大致意思是在setcookie之前不能有東西輸出到客戶端瀏覽器,否則會(huì)報(bào)錯(cuò)。但是經(jīng)測(cè)試發(fā)現(xiàn),并沒有報(bào)錯(cuò)。繼續(xù)翻看手冊(cè):
You can use output buffering to send output prior to the call of this function, with the overhead of all of your output to the browser being buffered in the server until you send it. You can do this by calling ob_start() and ob_end_flush() in your script, or setting the output_buffering configuration directive on in your php.ini or server configuration files.
于是我修改了php.ini(PHP版本5.4)的output_buffering為0,即關(guān)閉緩沖區(qū)。(PHP5.3版本以下是關(guān)閉的,5.3之后是默認(rèn)開啟,值為4096)
意思是如果在輸出cookie之前,設(shè)置了ob_start和ob_end_flush來輸出緩沖區(qū),則不會(huì)報(bào)錯(cuò)。那么,為什么cookie和緩沖區(qū)的數(shù)據(jù)一起返回就沒有報(bào)錯(cuò)呢?應(yīng)該是因?yàn)椋壕彌_區(qū)的數(shù)據(jù)將整理成一個(gè)完整的HTTP包發(fā)出去。
我們可以看一下報(bào)錯(cuò)信息:
echo "i am going to setcookie"; var_dump(setcookie('buhehe', 'asdasdasdasdad')); print_r($_COOKIE);
“請(qǐng)不要修改header信息,因?yàn)閔eader已經(jīng)發(fā)送過了?!焙苊黠@,沒有使用緩沖區(qū)輸出,則header先一步返回到瀏覽器了,然后再進(jìn)行setcookie發(fā)送header頭信息的時(shí)候,就報(bào)錯(cuò)啦——不符合HTTP協(xié)議的規(guī)范。因?yàn)镠TTP協(xié)議規(guī)定header應(yīng)該在body之前輸出。
我把代碼修改了一下,把將輸出的echo的數(shù)據(jù)和header頭的cookie一起發(fā)出去。
ob_start(); echo "i am going to setcookie"; var_dump(setcookie('buhehe', 'asdasdasdasdad')); ob_end_flush(); print_r($_COOKIE);
結(jié)果如下:
當(dāng)你設(shè)置output_buffering為0也就是在php.ini關(guān)閉緩沖區(qū)的時(shí)候,就需要手動(dòng)ob_start來開啟緩沖區(qū)了。
為什么有些開發(fā)者測(cè)試的時(shí)候,發(fā)現(xiàn)setcookie之前echo了信息也沒有報(bào)錯(cuò)呢?
因?yàn)楫?dāng)前大部分的PHP應(yīng)用都是5.3+ 的,有些甚至用上了7。PHP5.3+版本中,因?yàn)槟J(rèn)開啟了緩沖區(qū),并且默認(rèn)size為4096,所以在setcookie之前echo的數(shù)據(jù),以及cookie的header頭信息,都會(huì)在緩沖區(qū)被封裝成HTTP包,發(fā)給客戶端啦~所以也就不會(huì)產(chǎn)生上圖中的報(bào)錯(cuò)信息(請(qǐng)勿修改HTTP的header頭信息)啦~~
以上是“php中setcookie報(bào)錯(cuò)的解決方法”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)站題目:php中setcookie報(bào)錯(cuò)的解決方法
網(wǎng)站鏈接:http://aaarwkj.com/article36/isjssg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網(wǎng)站收錄、網(wǎng)站策劃、App設(shè)計(jì)、、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)