Cannot modify header information錯(cuò)誤解決方法
更新時(shí)間:2008年10月08日 10:34:10 作者:
Warning: Cannot modify header information - headers already sent by出錯(cuò)的原因
<?php
ob_start();
setcookie("username","宋巖賓",time()+3600);
echo "the username is:".$HTTP_COOKIE_VARS["username"]."\n";
echo "the username is:".$_COOKIE["username"]."\n";
print_r($_COOKIE);
?>
Warning: Cannot modify header information - headers already sent by出錯(cuò)的原因
我在php程序的頭部加了,
header("cache-control:no-cache,must-revalidate");
之后頁(yè)面就出現(xiàn)上面的錯(cuò)誤,看了N個(gè)資料也沒(méi)有結(jié)果。今天偶爾發(fā)現(xiàn)原來(lái)是我的php.ini里面的配置出了問(wèn)題,在C:\windows\下找到php.ini文件
output_buffering默認(rèn)為off的。我現(xiàn)在把它設(shè)為4096就OK了。
用于解決顯示提示錯(cuò)誤,不能按(日期+導(dǎo)出文件數(shù))為文件名的錯(cuò)誤信息.
setcookie函數(shù)必須在任何資料輸出至瀏覽器前,就先送出
基於上面這些限制,所以執(zhí)行setcookie()函數(shù)時(shí),常會(huì)碰到"Undefined index"、"Cannot modify header information - headers already sent by"…等問(wèn)題,解決"Cannot modify header information - headers already sent by"這個(gè)錯(cuò)誤的方法是在產(chǎn)生cookie前,先延緩資料輸出至瀏覽器,因此,您可以在程式的最前方加上ob_start();這個(gè)函數(shù)。
ob_start()函數(shù)用于打開(kāi)緩沖區(qū),比如header()函數(shù)之前如果就有輸出,包括回車(chē)\空格\換行\(zhòng)都會(huì)有"Header had all ready send by"的錯(cuò)誤,這時(shí)可以先用ob_start()打開(kāi)緩沖區(qū)PHP代碼的數(shù)據(jù)塊和echo()輸出都會(huì)進(jìn)入緩沖區(qū)而不會(huì)立刻輸出.當(dāng)然打開(kāi)緩沖區(qū)的作用很多,只要發(fā)揮你的想象.可以總結(jié)以下四點(diǎn):
1.用于header()之前
ob_start(); //打開(kāi)緩沖區(qū)
echo \"Hellon\"; //輸出
header("location:index.php"); //把瀏覽器重定向到index.php
ob_end_flush();//輸出全部?jī)?nèi)容到瀏覽器
?>
2.phpinfo()函數(shù)可獲取客戶(hù)端和服務(wù)器端的信息,但要保存客戶(hù)端信息用緩沖區(qū)的方法是最好的選擇.
ob_start(); //打開(kāi)緩沖區(qū)
phpinfo(); //使用phpinfo函數(shù)
$info=ob_get_contents(); //得到緩沖區(qū)的內(nèi)容并且賦值給$info
$file=fopen(\'info.txt\',\'w\'); //打開(kāi)文件info.txt
fwrite($file,$info); //寫(xiě)入信息到info.txt
fclose($file); //關(guān)閉文件info.txt
?>
3.靜態(tài)頁(yè)面技術(shù)
ob_start();//打開(kāi)緩沖區(qū)
?>
php頁(yè)面的全部輸出
$content = ob_get_contents();//取得php頁(yè)面輸出的全部?jī)?nèi)容
$fp = fopen("output00001.html", "w"); //創(chuàng)建一個(gè)文件,并打開(kāi),準(zhǔn)備寫(xiě)入
fwrite($fp, $content); //把php頁(yè)面的內(nèi)容全部寫(xiě)入output00001.html,然后……
fclose($fp);
?>
4.輸出代碼
Function run_code($code) {
If($code) {
ob_start();
eval($code);
$contents = ob_get_contents();
ob_end_clean();
}else {
echo "錯(cuò)誤!沒(méi)有輸出";
exit();
}
return $contents;
}
ob_start();
setcookie("username","宋巖賓",time()+3600);
echo "the username is:".$HTTP_COOKIE_VARS["username"]."\n";
echo "the username is:".$_COOKIE["username"]."\n";
print_r($_COOKIE);
?>
Warning: Cannot modify header information - headers already sent by出錯(cuò)的原因
我在php程序的頭部加了,
header("cache-control:no-cache,must-revalidate");
之后頁(yè)面就出現(xiàn)上面的錯(cuò)誤,看了N個(gè)資料也沒(méi)有結(jié)果。今天偶爾發(fā)現(xiàn)原來(lái)是我的php.ini里面的配置出了問(wèn)題,在C:\windows\下找到php.ini文件
output_buffering默認(rèn)為off的。我現(xiàn)在把它設(shè)為4096就OK了。
用于解決顯示提示錯(cuò)誤,不能按(日期+導(dǎo)出文件數(shù))為文件名的錯(cuò)誤信息.
setcookie函數(shù)必須在任何資料輸出至瀏覽器前,就先送出
基於上面這些限制,所以執(zhí)行setcookie()函數(shù)時(shí),常會(huì)碰到"Undefined index"、"Cannot modify header information - headers already sent by"…等問(wèn)題,解決"Cannot modify header information - headers already sent by"這個(gè)錯(cuò)誤的方法是在產(chǎn)生cookie前,先延緩資料輸出至瀏覽器,因此,您可以在程式的最前方加上ob_start();這個(gè)函數(shù)。
ob_start()函數(shù)用于打開(kāi)緩沖區(qū),比如header()函數(shù)之前如果就有輸出,包括回車(chē)\空格\換行\(zhòng)都會(huì)有"Header had all ready send by"的錯(cuò)誤,這時(shí)可以先用ob_start()打開(kāi)緩沖區(qū)PHP代碼的數(shù)據(jù)塊和echo()輸出都會(huì)進(jìn)入緩沖區(qū)而不會(huì)立刻輸出.當(dāng)然打開(kāi)緩沖區(qū)的作用很多,只要發(fā)揮你的想象.可以總結(jié)以下四點(diǎn):
1.用于header()之前
ob_start(); //打開(kāi)緩沖區(qū)
echo \"Hellon\"; //輸出
header("location:index.php"); //把瀏覽器重定向到index.php
ob_end_flush();//輸出全部?jī)?nèi)容到瀏覽器
?>
2.phpinfo()函數(shù)可獲取客戶(hù)端和服務(wù)器端的信息,但要保存客戶(hù)端信息用緩沖區(qū)的方法是最好的選擇.
ob_start(); //打開(kāi)緩沖區(qū)
phpinfo(); //使用phpinfo函數(shù)
$info=ob_get_contents(); //得到緩沖區(qū)的內(nèi)容并且賦值給$info
$file=fopen(\'info.txt\',\'w\'); //打開(kāi)文件info.txt
fwrite($file,$info); //寫(xiě)入信息到info.txt
fclose($file); //關(guān)閉文件info.txt
?>
3.靜態(tài)頁(yè)面技術(shù)
ob_start();//打開(kāi)緩沖區(qū)
?>
php頁(yè)面的全部輸出
$content = ob_get_contents();//取得php頁(yè)面輸出的全部?jī)?nèi)容
$fp = fopen("output00001.html", "w"); //創(chuàng)建一個(gè)文件,并打開(kāi),準(zhǔn)備寫(xiě)入
fwrite($fp, $content); //把php頁(yè)面的內(nèi)容全部寫(xiě)入output00001.html,然后……
fclose($fp);
?>
4.輸出代碼
Function run_code($code) {
If($code) {
ob_start();
eval($code);
$contents = ob_get_contents();
ob_end_clean();
}else {
echo "錯(cuò)誤!沒(méi)有輸出";
exit();
}
return $contents;
}
相關(guān)文章
PHP實(shí)現(xiàn)支持SSL連接的SMTP郵件發(fā)送類(lèi)
這篇文章主要介紹了PHP實(shí)現(xiàn)支持SSL連接的SMTP郵件發(fā)送類(lèi),實(shí)例分析了php實(shí)現(xiàn)smtp郵件發(fā)送類(lèi)的原理與技巧,以及支持SSL連接的方法,需要的朋友可以參考下2015-03-03
PHP入門(mén)教程之?dāng)?shù)組用法匯總(創(chuàng)建,刪除,遍歷,排序等)
這篇文章主要介紹了PHP入門(mén)教程之?dāng)?shù)組用法,結(jié)合大量實(shí)例總結(jié)分析了php關(guān)于數(shù)組的創(chuàng)建、打印、遍歷、獲取、排序、插入、刪除等常見(jiàn)操作技巧,需要的朋友可以參考下2016-09-09
PHP頁(yè)面靜態(tài)化——純靜態(tài)與偽靜態(tài)用法詳解
這篇文章主要介紹了PHP頁(yè)面靜態(tài)化——純靜態(tài)與偽靜態(tài)用法,結(jié)合實(shí)例形式分析了PHP頁(yè)面靜態(tài)化——純靜態(tài)與偽靜態(tài)相關(guān)原理、實(shí)現(xiàn)方法與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2020-06-06
ThinkPHP6使用最新版本Endroid/QrCode生成二維碼的方法實(shí)例
這篇文章主要介紹了ThinkPHP6使用最新版本Endroid/QrCode生成二維碼的方法,結(jié)合實(shí)例形式詳細(xì)分析了ThinkPHP6使用最新版本Endroid/QrCode生成二維碼具體步驟、原理、實(shí)現(xiàn)方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2023-07-07
mayfish 數(shù)據(jù)入庫(kù)驗(yàn)證代碼
mayfish 可以靈活的自定義將要執(zhí)行寫(xiě)入的數(shù)據(jù)內(nèi)容的校驗(yàn)規(guī)則,以減少開(kāi)發(fā)人員手動(dòng)對(duì)每一個(gè)字段的數(shù)據(jù)進(jìn)行校驗(yàn)的麻煩。2010-04-04

