Warning Cannot send session cookie - headers already sent...問題の解決(PHPのUTF-8 BOMによる問題)->回転

3311 ワード


edit plusでphpプログラミングを行うことに慣れているので、知られていないエラーが発生することがあり、面倒です.最近、プロジェクトを開発する際、いくつかのページでは、次のような問題が発生しています.
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署名の1つで、オプション「常に署名を追加」を「常に署名を削除」に変更し、indexを開きます.phpファイルを再保存し、スクリプトを再実行して、やっと正常になりました.
また、ネット上で参考になる2つの文章を見つけました.このような状況に遭遇したときに完璧に解決してほしいです.
UTF-8 BOMによるPHPの奇妙な問題2007-06-30 14:29一、
//---a.php
<?php
header("Content-Type: image/BMP");
session_start();
................
?>

a.phpをutf-8形式に保存すると、ブラウザでこのphpファイルにアクセスすると、Warning:session_というエラーが発生します.start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started
at ×××.php:1) in ×××on line 2
この問題はよくあります.多くはsessionのためです.startの前に出力がありました!老鳥にとって、この間違いはほとんど起こりませんが、DWやeditplusなどの編を使うと
集器がコードを書くのは、達人でもこの間違いが発生する可能性があります!
上のヒントのように:×××ファイルの1行目、×××ファイルの2行目、ご覧のように、この2つの場所には何の出力文もありません.おかしいですか、それとも間違いがありますか.なぜですか.
Unicode署名(BOM)は、文書にバイト順タグ(BOM)を含めることができる.BOMはテキストファイルの先頭にある2~4バイトで、ファイルをUnicodeとして識別できます.
同様に、後続バイトのバイト順も識別します.UTF-8にはバイト順がないため、UTF-8 BOMの追加を選択できます.UTF-16およびUTF-32の場合、これは必須です.見たか?このオプションを選択すると、ページの一番前に2~4バイト出力されます!
そしてsession_start()要求前にクライアントブラウザに出力されなかった
二、
また、次のようなエラーが発生する可能性があります.
/--a.php-- 
?>

もしあなたがa.phpを含んでから来てもこの問題があるならば、通常の提案はいつも含まれているファイルの末尾はありませんか?>
Sessionを呼び出すStart()の前に出力はできません.たとえば、次はエラーです.
<?PHP
Session_Start();//
.....
?>

==========================================
すでに実験を経たが,事実は確かにこのように奇妙だ.三、
session_start()set_クッキー()ヘッダ()の前に@を付けるとこの警告を抑えることができるはずです.
四、
editplusエディタでは、utf-8のa.phpファイルをgb 2312または他に変換してからutf-8に変換すると、ファイルの先頭にある
BOMは外されていますが、この時のUTF-8はBOM無しタイプです
PHP-utf-8符号化問題によるsession_についてstart()エラーがデフォルトのgb 2312符号化を採用した場合、Ansi符号化に対応し、ファイルヘッダに追加情報がない場合、session_start()は正常に動作します.utf符号化を採用すると、ほとんどのエディタはファイルヘッダにBOMブロックを添付し、私のEditPlusはFFFEを添付し、16進数エディタでよく見ることができます.これによりsession_が呼び出されるstart()の場合、実際にブラウザに2バイト出力されていますが、非表示文字ブラウザでは次の警告が表示されます.Warning:session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at ......................
解決方法:1、手動でBOMブロックを削除し、UltraEditなどの16進数エディタで編集したり、エディタが持っている機能を採用したりして、良いエディタは一般的にBOMブロックを除去するかどうかを選択します.2、自分でスクリプト修正を作成する.これは異なるエディタに対して、BOMヘッド定義:UTF-8 EF BB BFUTF-16 Big Endian FE FFUTF-16 Little Endian FF FEUTF-32 Big Endian 00 FE FFUTF-32 Little Endian FFFE 00