関数実行時に、エラーアドレスが最初に処理されてCookieに書き込まれ、ユーザーが直接ジャンプできるようにする統一エラープロンプト関数を作成しました。ログイン後、実行するページに移動すると、サーバーでテストするときに、ローカルでは発生しなかったエラーが表示されることがわかりました: 警告: ヘッダー情報を変更できません - ヘッダーはすでに....
によって送信されましたこの理由は明らかです。 setcookie が原因であるため、ネットで調べたところ、次のような説明がありました。 Cookie 自体には、次のような使用上の制限があります。
1. setcookie を呼び出す記述を配置する必要がある タグの前
2. setcookie を呼び出す前に、echo を使用することはできません
3. Web ページがリロードされるまで、Cookie はプログラムに表示されません
4. setcookie 関数は、データが出力される前に送信する必要がありますブラウザ
5.……
上記の制限に基づいて、 setcookie() 関数を実行すると、「インデックスが未定義」、「ヘッダー情報を変更できない - ヘッダーが既に送信されている」などの問題が発生することがよくあります。 「ヘッダー情報を変更できません - ヘッダーはすでに送信されています」というエラーを解決するには、ブラウザへのデータ出力を遅らせるために、プログラムの先頭に ob_start(); 関数を追加します。これで解決します。 ob_start() を追加したい場合、プログラムを作成した後にこれを変更するのは少し気が滅入ります。このエラーが表示されたことを知ったとき、なぜ私のローカル コンピュータではこのエラーが表示されなかったのか疑問に思いました。 PHP.ini の設定が違うと思っていましたが、違うようです...
ということで、次の文を見てください。「output starting at....」という出力があることを意味します。 setcookie の前の別の場所で、次の出力が始まり、最初の行が空白であることがわかり、その後、解決策 2:
オンラインで見つかったこの問題を解決する方法はほとんど同じです。今日、またそのような問題に遭遇しました。試してみたところ、うまくいくことがわかりました。
php.ini 設定ファイルを見つけて、output_buffering という項目を検索し、その値を off から on に変更し、Apache を再起動すれば問題ありません。
追記: SAE で PHP アプリケーションを作成するときに、jump と setcookie がサポートされていない場合、この状況も発生することがあります。 SAE 開発文書の仕様に従う必要があります。
。