PHPセッションCookieエラーを完全に排除

WBOY
リリース: 2016-06-21 08:57:00
オリジナル
1259 人が閲覧しました

この記事では、次のような不可解なエラー警告を完全に削除する方法について説明します: ヘッダー情報を追加できません - ヘッダーはすでに送信されています...

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 = オンまたは任意の数値に変更します。 IIS6 の場合は、ON に変更してください。そうしないと、PHP の効率が非常に遅くなります。

2) 仮想ホストを使用すると、PHP を編集できません。イニさん、どうしたらいいでしょうか?

シンプル:

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

すべて上書きを許可
PHP_FLAG 出力バッファリング オン

残念な状況は次のとおりです: まだ不可能ですか?すべての 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 ヘッダーをブラウザーに送信し、出力バッファーの内容を送信します。



関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート