ホームページ >バックエンド開発 >PHPチュートリアル >Flash Cookie により、PHP セッション Cookie エラーが完全に排除されます
PHP コードを書いたことがある限り、ほとんどの場合、この不可解な警告に遭遇したことがあると思います。今日はそれを解決します。......
見てください。PHP マニュアルを参照してください。そして答えは次のとおりです:
メッセージ「警告: セッション Cookie を送信できません - ヘッダーはすでに送信されました...」または「ヘッダー情報を追加できません - ヘッダーはすでに送信されました...」。
関数 header()、setcookie()、およびセッション関数は、出力ストリームにヘッダー情報を追加する必要があります。ただし、ヘッダー情報は、他の出力コンテンツの前にのみ送信できます。これらの関数を使用する前に出力 (HTML など) を行うことはできません。 headers_sent() 関数は、スクリプトがヘッダーを送信したかどうかをチェックします。 「出力制御関数」を参照してください。
意味:上記の機能を使用する前に、テキスト、空白行、復帰、スペースなどを入れないでください。しかし。 。 。問題は、この答えが満足のいくものではないということです。プログラムは他の PHP 環境でも正常に動作することが多いためです。
まず: このエラーはどのようにして発生するのでしょうか? PHP が HTTP ヘッダー出力と本文出力をどのように処理するかを見てみましょう。
PHP スクリプトの実行が開始されると、ヘッダー情報と本文情報を同時に送信できます。ヘッダー情報 (header() または SetCookie() 関数から) はすぐには送信されず、リストに保存されます。 これにより、デフォルトのヘッダー (Content-Type ヘッダーなど) を含むヘッダー情報を変更できます。ただし、スクリプトがヘッダー以外の出力を送信すると (たとえば、HTML または print() 呼び出しを使用して)、PHP は最初にすべてのヘッダーを送信してから、HTTP ヘッダーを終了する必要があります。その後、メイン データの送信を続けます。この時点から、ヘッダー情報を追加または変更する試みは許可されず、上記のエラー メッセージのいずれかが送信されます。
わかりました! それでは解決しましょう:
愚かな方法: エラー警告を表示しないでください!
耳を塞いでベルを盗む具体的な方法には触れません ^_^#
解決策: 1) 以下に適しています。 PHPを編集する権限のある方。 INIの人
phpを開きます。 ini ファイル (あなたの php については私よりもよく知っているはずです。ini はどこにありますか) で、
output_buffering = を見つけて、それを on または任意の数値に変更します。 IIS6 の場合は、ON に変更してください。そうしないと、PHP の効率が非常に遅くなります。
2) バーチャルホストを使用する場合、PHPの編集はできません。 INI、どうすればいいでしょうか?
簡単です:
スペースのルートディレクトリに作成します。 htaccess ファイルの内容は次のとおりです:
AllowOverride All
PHP_FLAG Output_buffering On
残念な状況ですが、まだすべての Web ページが表示されません
その後、スペースプロバイダーに電話して、Apache をインストールするように依頼できますか? 。 htaccessのAllowOverrideをonにする
3)PHPファイル内で解決する
ob_start()
出力バッファリング機構を有効にする。出力バッファリングは複数のレベルをサポートします。たとえば、ob_start() 関数は複数回呼び出すことができます。
ob_end_flush()
出力バッファ(出力バッファ)を送信し、出力バッファリング機構を無効にします。
ob_end_clean()
出力バッファをクリアしますが送信はせず、出力バッファリングを無効にします。
ob_get_contents()
現在の出力バッファを文字列に返します。スクリプトによって出力された出力を処理できます。
原則:
output_buffering が有効な場合、スクリプトが出力を送信するときに PHP は HTTP ヘッダーを送信しません。代わりに、この出力を動的に増加するキャッシュにパイプ処理します (集中出力メカニズムを持つ PHP 4.0 でのみ使用可能)。ヘッダーは実際には送信されないため、ヘッダーを変更/追加したり、Cookie を設定したりすることができます。すべてのスクリプトが終了すると、PHP は自動的に HTTP ヘッダーをブラウザーに送信し、出力バッファーの内容を送信します。
上記は、PHP セッション Cookie エラーを完全に排除するための Flash Cookie を紹介しており、Flash Cookie の内容も含めて、PHP チュートリアルに興味のある友人に役立つことを願っています。