今日、PHP 関数 setcookie() を使用して値を設定すると、次のプロンプトが表示されました。 警告: すでに送信されたヘッダー情報を変更することはできません。すぐに gg に問い合わせて、N 個の解決策を見つけました。皆さんのお役に立てれば幸いです。
仕事を終えようとしたとき、PHP ディスカッション グループの友人が Cookie の設定について話しているのを見ました。コードを聞いてみたら、その理由が分かりました!エラーを報告する
警告: ヘッダー情報は変更できません – ヘッダーはすでに cookie1.php の 5 行目 (cookie1.php:4 で開始された出力) によって送信されています
ob_start();
setcookie("ユーザー名","ソン・ヤンビン",time()+3600);
echo "ユーザー名は:".$HTTP_COOKIE_VARS["ユーザー名"]." ";
echo "ユーザー名は:".$_COOKIE["ユーザー名"]." ";
print_r($_COOKIE);
?>
警告: ヘッダー情報は変更できません - ヘッダーは既に送信されていますエラーの原因
phpプログラムの先頭に追加しました
header("キャッシュ制御:キャッシュなし、再検証が必要");
その後、ページ上に上記のエラーが表示され、N情報を読み込んでも結果が出ませんでした。今日、php.ini の設定に問題があることに偶然気づきました。php.ini ファイルが C:windows
にありました。
Output_buffering のデフォルトはオフです。今は4096に設定したらOKです。
プロンプト表示エラーと、(日付 + エクスポートされたファイルの数) をファイル名として使用できないというエラー メッセージが表示される問題を解決するために使用されます。
setcookie 関数は、データがブラウザーに送信される前に送信する必要があります
上記の制限により、etcookie()関数では「インデックスが未定義です」「ヘッダー情報を変更できません - ヘッダーはすでに送信されています...etc.???、解決策?Q」と表示される場合が多いです。ヘッダー情報を変更できない方法 - "??????" によって既に送信されているヘッダーは、Cookie を生成する前にサーバーへのデータの出力を遅らせるため、プログラムの先頭に ob_start( );???Function?lazy? を追加できます。 br /> ob_start() 関数は、バッファを開くために使用されます。たとえば、header() 関数の前にキャリッジ リターン、スペース、ライン フィードを含む出力がある場合、「ヘッダーはすべての送信準備ができました。」 " エラー。最初に ob_start() を使用してバッファを開くことができます。PHP コードのデータ ブロックと echo() の出力はバッファに入りますが、すぐには出力されません。もちろん、バッファを開くには多くの機能がありますが、想像力を働かせてください。次のように要約できます。
ob_start(); //バッファをオープンします
echo "こんにちは" //出力
header("location:index.php"); //ブラウザをindex.phpにリダイレクトします
ob_end_flush();//すべてのコンテンツをブラウザに出力します
?>
phpinfo(); //phpinfo関数を使用します
$info=ob_get_contents(); //バッファの内容を取得して $info に代入します
$file=fopen('info.txt','w'); // ファイル info.txt を開きます
fwrite($file,$info); //info.txt に情報を書き込みます
fclose($file); // ファイル info.txt を閉じる
?>
3. 静的ページテクノロジー
?>
PHPページのすべての出力
$content = ob_get_contents();//PHP ページによって出力されたすべてのコンテンツを取得します
$fp = fopen("output00001.html", "w"); // ファイルを作成し、書き込み用に開きます
;
fwrite($fp, $content); //PHP ページのすべてのコンテンツを Output00001.html に書き込み、その後...
fclose($fp);
?>
4.コードを出力する
関数 run_code($code) {
ob_start();
評価($コード);
$contents = ob_get_contents();
ob_end_clean();
} その他 {
echo "エラー! 出力がありません";
終了();
}
$content を返す
}
PHPマニュアルを読んで理由を調べました。結論を出してください
方法 1:
PHP での Cookie の使用にはいくつかの制限があります。
1. setcookie は タグの前にある必要があります。
2. setcookieを使用する前は、echoを使用してコンテンツを入力することはできません
4. データを送信する前に、ブラウザにデータを出力する前に setcookie を配置する必要があります
上記の制限により、setcookie() 関数を使用すると、「インデックスが定義されていない」、「ヘッダー情報を変更できません – ヘッダーはすでに送信されています」などの問題が発生する可能性があります。解決策は、出力する前に Cookie を生成することです。プログラム内で実行できる内容 先頭に関数 ob_start();を追加します
ob_start: 出力バッファを開きます関数形式: void ob_start(void)
注: バッファーがアクティブ化されると、PHP プログラムからのファイル以外のヘッダー情報はすべて送信されず、内部バッファーに保存されます。バッファの内容を出力するには、ob_end_flush() または flash() を使用してバッファの内容を出力します。
方法 2:
警告の解決策: ヘッダー情報は変更できません – ヘッダーは既に送信されています… ファイルの先頭に ob_start(); を書くと失敗するという人もいます。
後で php.ini を開き、output_buffering を on に設定します。 Appache を再起動します。OK。これが解決策のようです。
特記事項: (これを読んだ後、問題が解決しました)
utf-8 エンコードを使用する場合は、UTF-8 で BOM を削除する必要があります。これは、utf-8 エンコードされたファイルには BOM が含まれており、php4 および 5 は BOM をサポートしていないためです。 BOM を削除するには、Notepad++ で開いて変換します。 (これを読んだ直後に問題が解決しました)
PHP の ob_start() を使用してブラウザのキャッシュを制御します。