php無法保存cookies問題解決

今天弄php程序,突然發現一個問題,就是cookies無法保存,且不發生任何錯誤,經過一番查找發現問題如下:

因為程序在寫Cookies是用的是[email protected] ( "url", "http://www.my400800.cn", time()+3600*24, "/");

PHP 的 @、# 符號的意思

function foo($n)
{
    $result = 1/$n;
    return $result;
}
echo @foo(0); // 函數中會產生除 0 錯誤,但加上 @ 后并不顯示該錯誤。
echo "end"; // 輸出 end

# 注釋符號

同 // 一樣,# 是單行注釋符(多行注釋符為 /* */)。

由于使用了@setcookie,即便在寫入cookies是發生錯誤,也不會輸出,造成了無法發現問題。最后把@setcookie改成 setcookie,程序輸出如下錯誤信息:

Warning: Cannot modify header information - headers already sent by (output started at

經過上網一查,發現原來在進行setcookie設置前不能有任何輸出內容,然后就去檢查代碼,也沒有發現在setcookie之前輸出了東西,在搜索了一下,發現了問題所在,具體內容如下:

今天在WordPress中文論壇逛了一圈。壇子里人氣不高,不過還是有很多高手的。會編寫插件和模版的高手和連編輯文件都不會的初學者混在一起,論壇就是這樣,哈哈。

看到好幾個帖子里提到同一個錯誤,比如這個帖子里提到的:"Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\wp-config.php:1) in c:\program files\easyphp1-8\www\wp-login.php on line 9"

這是一個很典型的問題。WordPress的程序執行時會首先調用wp-config.php一類的配置文件,也會調用wp-db.php建立數據庫連接以備后用。這些文件只是做一些設置,并不輸出html代碼。設置完了后,程序本身開始執行了,有些程序會使用header命令設置一個HTTP頭。由于HTTP頭必須在html代碼輸出之前設置好,否則html代碼已經開始往客戶端發送了,HTTP也就已經發送過了,沒法追回來重新設置了。WordPress CodeX里對這個問題作出了說明:《How do I solve the Headers already sent warning problem?》。文章指出:要確保各個文件——尤其是經常被編輯的wp-config.php文件——以<?php開頭,以?>結尾,前后不能有其他字符。具體到上面的例子,很明顯,提示信息說wp-config.php的第一行就開始了html輸出,這有可能是第一行的<?php部分前面被加上的其他字符,比如空格一類的。再聯想到以前提到的BOM的問題,那么非常有可能是因為這位朋友使用了Windows的記事本編輯了wp-config.php文件并保存成了UTF-8編碼的文檔,從而因為BOM的三個字符的輸出造成了header命令執行出錯。

解決方法

WordPress中文論壇沒有提供全文搜索的功能,只能搜索標題,所以我用Google搜索了一下Cannot modify header information site:wordpress.org.cn,好像碰到這個問題的人還真不少。目前大家用的WordPress主要是WordPress英文原版和幾個WordPress中文版。我的中文包又不包含wp-config-sample.php文件,自然不關我的事;WordPress原版用的ASCII碼,自然不包含BOM,也不會出這樣的錯誤;xigang制作的WordPress中文版在WordPress中文論壇有下,我去下載了WordPress 2.0.4和2.0.3這兩個,檢查了一下,沒有問題;點點游的WordPress 2.0.4中文版里,wp-config-sample.php文件用的是GB2312編碼和DOS行尾符,GOD!不過這樣也好,如果有人用記事本修改了這個文件,DOS行尾符不會造成編輯問題,GB2312編碼不會造成BOM的問題,呼。

唉,如果你要用WordPress架Blog,還是扔掉記事本,裝個UltraEdit或者EditPlus吧!

作者: ljlxyf   發布時間: 2011-06-14

双面盘玩法