Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at E:\web\Apache2\htdocs\index.php:1) in E:\web\Apache2\htdocs\functions\sessions.php on line 67
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at E:\web\Apache2\htdocs\index.php:1) in E:\web\Apache2\htdocs\functions\sessions.php on line 67
經過詳細搜尋,得到以下原因:
我的edit plus中設定了預設的編碼為utf-8,且UTF_8簽名為:總是添加簽名;
於是嘗試以下操作:
在edit plus 的工具->參數->檔案->UTF_8簽名一項中,更改選項"總是添加簽名"為"總是移除簽名",然後開啟index.php檔案,並重新另存新檔,重新運行指令碼,終於可以正常了;
大中小
採用預設的gb2312編碼時,相容Ansi編碼,檔案頭部無任何附加資訊,此時session_start()可以正常工作。
採用utf編碼時,大部分編輯器都會在在檔案頭部附加一個BOM塊,我的EditPlus附加的是FF FE,用16進位編輯器
可以很清楚的看到。這樣,當調用session_start()時,實際上已經向瀏覽器輸出兩個位元組,只不過是不可見字元瀏
覽器中出現如下警告:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at ......................
解決方案:
1、手動去掉BOM塊,可以在16進位編輯器如UltraEdit中編輯,或者採用編輯器內建的功能,好的編輯器一般提供選擇是否去除BOM塊。
2、自己編寫指令碼更正,這要針對不同的編輯器,BOM頭定義:
UTF-8 EF BB BF
UTF-16 Big Endian FE FF
UTF-16 Little Endian FF FE
UTF-32 Big Endian 00 00 FE FF
UTF-32 Little Endian FF FE 00 00