在php中header有很多的作用,這里我們給大家介紹在使用header作文件跳轉(zhuǎn)時(shí)一些注意事項(xiàng),希望此文章能給各位朋友帶來快樂。
header("Location:login.php")應(yīng)該注意的幾個(gè)問題
header("Location:")作為php的轉(zhuǎn)向語句,其實(shí)在使用中,他有幾點(diǎn)需要注意的地方。
1、要求header前沒有任何輸出
但是很多時(shí)候在header前我們已經(jīng)輸出了好多東西了,此時(shí)如果再次header的話,顯然是出錯(cuò)的,在這里我們啟用了一個(gè)ob的概念,ob的意思是在服務(wù)器端先存儲(chǔ)有關(guān)輸出,等待適當(dāng)?shù)臅r(shí)機(jī)再輸出,而不是像現(xiàn)在這樣運(yùn)行一句,輸出一句,發(fā)現(xiàn)header語句就只能報(bào)錯(cuò)了。
具體的語句有:ob_start(); ob_end_clean();ob_flush();.........
2、在header("Location:")后要及時(shí)exit
所以,標(biāo)準(zhǔn)的使用方法是,如下代碼:
output_handler =mb_output_handler 或 output_handler =on
Output Control 函數(shù)可以讓你自由控制腳本中數(shù)據(jù)的輸出。它非常地有用,特別是對(duì)于:當(dāng)你想在數(shù)據(jù)已經(jīng)輸出后,再輸出文件頭的情況。輸出控制函數(shù)不對(duì)使用 header() 或 setcookie(), 發(fā)送的文件頭信息產(chǎn)生影響,只對(duì)那些類似于 echo() 和 PHP 代碼的數(shù)據(jù)塊有作用。
一、相關(guān)函數(shù)簡(jiǎn)介:
1、Flush:刷新緩沖區(qū)的內(nèi)容,輸出。
函數(shù)格式:flush()
說明:這個(gè)函數(shù)經(jīng)常使用,效率很高。
2、ob_start :打開輸出緩沖區(qū)
函數(shù)格式:void ob_start(void)
說明:當(dāng)緩沖區(qū)激活時(shí),所有來自PHP程序的非文件頭信息均不會(huì)發(fā)送,而是保存在內(nèi)部緩沖區(qū)。為了輸出緩沖區(qū)的內(nèi)容,可以使用ob_end_flush()或flush()輸出緩沖區(qū)的內(nèi)容。
3、ob_get_contents :返回內(nèi)部緩沖區(qū)的內(nèi)容。
使用方法:string ob_get_contents(void)
說明:這個(gè)函數(shù)會(huì)返回當(dāng)前緩沖區(qū)中的內(nèi)容,如果輸出緩沖區(qū)沒有激活,則返回 FALSE 。
4、ob_get_length:返回內(nèi)部緩沖區(qū)的長度。
使用方法:int ob_get_length(void)
說明:這個(gè)函數(shù)會(huì)返回當(dāng)前緩沖區(qū)中的長度;和ob_get_contents一樣,如果輸出緩沖區(qū)沒有激活。則返回 FALSE。
5、ob_end_flush :發(fā)送內(nèi)部緩沖區(qū)的內(nèi)容到瀏覽器,并且關(guān)閉輸出緩沖區(qū)。
使用方法:void ob_end_flush(void)
說明:這個(gè)函數(shù)發(fā)送輸出緩沖區(qū)的內(nèi)容(如果有的話)。
6、ob_end_clean:刪除內(nèi)部緩沖區(qū)的內(nèi)容,并且關(guān)閉內(nèi)部緩沖區(qū)
使用方法:void ob_end_clean(void)
說明:這個(gè)函數(shù)不會(huì)輸出內(nèi)部緩沖區(qū)的內(nèi)容而是把它刪除!
7、ob_implicit_flush:打開或關(guān)閉絕對(duì)刷新
使用方法:void ob_implicit_flush ([int flag])
說明:使用過Perl的人都知道$|=x的意義,這個(gè)字符串可以打開/關(guān)閉緩沖區(qū),而ob_implicit_flush函數(shù)也和那個(gè)一樣,默認(rèn)為關(guān)閉緩沖區(qū),打開絕對(duì)輸出后,每個(gè)腳本輸出都直接發(fā)送到瀏覽器,不再需要調(diào)用 flush()
ob_start() 開始輸出緩沖, 這時(shí)PHP停止輸出, 在這以后的輸出都被轉(zhuǎn)到一個(gè)內(nèi)部的緩沖里.
ob_get_contents() 這個(gè)函數(shù)返回內(nèi)部緩沖的內(nèi)容. 這就等于把這些輸出都變成了字符串.
ob_get_ length() 返回內(nèi)部緩沖的長度.
ob_end_flush() 結(jié)束輸出緩沖, 并輸出緩沖里的內(nèi)容. 在這以后的輸出都是正常輸出.
ob_end_clean() 結(jié)束輸出緩沖, 并扔掉緩沖里的內(nèi)容.
舉個(gè)例子,var_dump()函數(shù)輸出一個(gè)變量的結(jié)構(gòu)和內(nèi)容, 這在調(diào)試的時(shí)候很有用.
但如果變量的內(nèi)容里有 < , > 等HTML的特殊字符, 輸出到網(wǎng)頁里就看不見了. 怎么辦呢?用輸出緩沖函數(shù)能很容易的解決這個(gè)問題,代碼如下:
這時(shí)var_dump()的輸出已經(jīng)存在 $out 里了,你可以現(xiàn)在就輸出,代碼如下:
echo '<pre>' . htmlspecialchars($out) . '</pre>' ;