簡介:這是php無法儲存cookies問題解決的詳細頁面,介紹了和php,有關的知識、技巧、經驗,和一些php源碼等。
class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=338319' scrolling='no'>
今天弄php程式,突然發現一個問題,就是cookies無法儲存,且不發生任何錯誤,經過一番尋找發現問題如下:
因為程式在寫Cookies是用的是?@setcookie ( "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吧!
愛J2EE關注Java邁克爾傑克遜視頻站JSON線上工具
http://biancheng.dnbcw.info/php/338319.html pageNo:9