ホームページ > バックエンド開発 > PHPチュートリアル > root_PHP チュートリアルの PHP セッション Cookie エラーを回避する

root_PHP チュートリアルの PHP セッション Cookie エラーを回避する

WBOY
リリース: 2016-07-21 14:56:11
オリジナル
687 人が閲覧しました

Bkjia.Com ネットワーク プログラミング この記事では、次のような不可解なエラー警告を完全に排除する方法について説明します: ヘッダー情報を追加できません - ヘッダーは既に送信されています...

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の編集はできません。イニさん、どうしたらいいでしょうか?

シンプル:

スペースのルートディレクトリに作成します。 htaccess ファイルの内容は次のとおりです:

AllowOverride All

PHP_FLAG Output_buffering On

残念な状況は次のとおりです: まだ不可能ですか?すべての Web ページが表示できないのですが?

その後、スペース提供者に電話して叱り、Apacheをインストールしてもらうと良いでしょう。

での htaccess のAllowOverride

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 ヘッダーをブラウザーに送信し、出力バッファーの内容を送信します。

http://www.bkjia.com/PHPjc/364283.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/364283.html技術記事 LieHuo.Net ネットワーク プログラミング この記事では、次の警告を完全に排除する方法について説明します: ヘッダー情報を追加できません - ヘッダーはすでに送信されています... この種の不可解なエラー...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート