ホームページ  >  記事  >  バックエンド開発  >  hp 関数 setcookie() がエラーを報告します: 警告: header_PHP チュートリアルを変更できません

hp 関数 setcookie() がエラーを報告します: 警告: header_PHP チュートリアルを変更できません

WBOY
WBOYオリジナル
2016-07-13 10:43:25823ブラウズ

今日、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() の出力はバッファに入りますが、すぐには出力されません。もちろん、バッファを開くには多くの機能がありますが、想像力を働かせてください。次のように要約できます。

1. header() の前に使用されます

ob_start(); //バッファをオープンします

echo "こんにちは" //出力
header("location:index.php"); //ブラウザをindex.phpにリダイレクトします
ob_end_flush();//すべてのコンテンツをブラウザに出力します
?>

2. phpinfo() 関数はクライアントとサーバーの情報を取得できますが、クライアント情報を保存するにはバッファーメソッドが最適です。 ob_start(); // バッファをオープンします

phpinfo(); //phpinfo関数を使用します
$info=ob_get_contents(); //バッファの内容を取得して $info に代入します
$file=fopen('info.txt','w'); // ファイル info.txt を開きます
fwrite($file,$info); //info.txt に情報を書き込みます
fclose($file); // ファイル info.txt を閉じる
?>

3. 静的ページテクノロジー

ob_start();//バッファを開く

?>
PHPページのすべての出力
$content = ob_get_contents();//PHP ページによって出力されたすべてのコンテンツを取得します
$fp = fopen("output00001.html", "w"); // ファイルを作成し、書き込み用に開きます
; fwrite($fp, $content); //PHP ページのすべてのコンテンツを Output00001.html に書き込み、その後...
fclose($fp); ?>

4.コードを出力する
関数 run_code($code) {

If($code) {

ob_start(); 評価($コード); $contents = ob_get_contents(); ob_end_clean(); } その他 {
echo "エラー! 出力がありません"; 終了(); }
$content を返す
}



PHPマニュアルを読んで理由を調べました。結論を出してください

方法 1:

PHP での Cookie の使用にはいくつかの制限があります。
1. setcookie は タグの前にある必要があります。 2. setcookieを使用する前は、echoを使用してコンテンツを入力することはできません

3. Web ページが読み込まれるまで Cookie は表示されません

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() を使用してブラウザのキャッシュを制御します。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/633185.html技術記事今日、PHP 関数 setcookie() を使用して値を設定すると、次のメッセージが表示されました。 警告: すでに送信されたヘッダー情報ヘッダーを変更できません。すぐに gg に問い合わせたところ、N 件の解決策が見つかりました...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。