Bkjia.Com ネットワーク プログラミング この記事では、次のような不可解なエラー警告を完全に排除する方法について説明します: ヘッダー情報を追加できません - ヘッダーは既に送信されています...
PHP コードを書いたことがある限り、ほとんどの場合、この不可解な警告に遭遇したことがあると思います。今日はそれを解決します。
PHP マニュアルを読んだ後の答えは次のとおりです:メッセージ「警告: セッション Cookie を送信できません - ヘッダーはすでに送信されました...」または「ヘッダー情報を追加できません - ヘッダーはすでに送信されました...」。
関数 header()、setcookie()、およびセッション関数は、出力ストリームにヘッダー情報を追加する必要があります。ただし、ヘッダー情報は、他の出力コンテンツの前にのみ送信できます。これらの関数を使用する前に、出力 (HTML など) が存在しないようにしてください。 headers_sent() 関数は、スクリプトがヘッダーを送信したかどうかをチェックします。 「出力制御関数」を参照してください。
意味:上記の機能を使用する前に、テキスト、空白行、復帰、スペースなどを入れないでください。しかし。 。 。問題は、この答えが満足のいくものではないということです。プログラムは他の PHP 環境でも正常に動作することが多いためです。
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
その後、スペース提供者に電話して叱り、Apacheをインストールしてもらうと良いでしょう。
での htaccess のAllowOverride
3) PHPファイルで解くob_start()
出力バッファリングメカニズムを有効にします。出力バッファリングは複数のレベルをサポートします。たとえば、ob_start() 関数は複数回呼び出すことができます。
出力バッファ(出力バッファ)を送信し、出力バッファリング機構を無効にします。
出力バッファをクリアしますが送信はせず、出力バッファリングを無効にします。
現在の出力バッファを文字列に返します。スクリプトによって出力された出力を処理できます。
output_buffering が有効な場合、スクリプトが出力を送信するときに PHP は HTTP ヘッダーを送信しません。代わりに、この出力を動的に増加するキャッシュにパイプ処理します (集中出力メカニズムを持つ PHP 4.0 でのみ使用可能)。ヘッダーは実際には送信されないため、ヘッダーを変更/追加したり、Cookie を設定したりすることができます。すべてのスクリプトが終了すると、PHP は自動的に HTTP ヘッダーをブラウザーに送信し、出力バッファーの内容を送信します。