-1

サイトのすべてのページに含まれる header.php ファイルがあり、情報や開始タグなどが含まれています。

サイトの別のページからヘッダー情報を送信しようとすると、クライアント コンピュータに既に HTML を送信しているため、送信できないことがわかります。だから私は多くのグーグルの後に関数を作成し、それを Header.php ファイルの先頭に貼り付けました:

   ob_start();
function redirect($url){
    flush();
    ob_flush();
    header("Location: $url");
    die;
}

サイト内のどこからでも呼び出すことができますが、それでもエラーが発生します。私はおそらくこの機能をすべて間違って実行していますが、それはグーグルが時々行うことです。これを修正するための助けは素晴らしいでしょう、ありがとう。

編集:「ヘッダー情報を変更できません - ヘッダーは既に送信されています...」というエラーが表示されます。私はすでにこの問題を修正しています。

4

4 に答える 4

1

flush()は、バッファをブラウザに書き込みます。これは、必要なものとは逆です。フラッシュラインを削除します。バッファをクリアする場合は、 http: //us2.php.net/manual/en/function.ob-clean.phpを参照してください。

于 2012-06-25T22:37:22.900 に答える
0

発生している「エラー」を言う必要がありますが、ブラウザに何かが出力された後、ページのどこかにこの関数を含めると、「ヘッダー情報を変更できません」というエラーが発生します。

関数に入れるかどうかは関係ありません。ブラウザに何かが出力される前に来る必要があります。

また、なぜflush()この機能を組み込んだのですか?これにより、リダイレクトも機能しなくなる可能性があります。

于 2012-06-25T22:37:23.247 に答える
0

私は信じている

ob_end_clean();

あなたが探している機能です。したがって、flush() 関数と ob_flush() 関数の両方の代わりに。

于 2012-06-25T22:46:57.067 に答える
0

ヘッダー関数に @ を追加するだけです

@header("Location: $url");

しかし、それは良い解決策ではありません。

ブラウザにデータを送信するとき、200 ステータスのヘッダーも送信してから、302 ステータス(リダイレクト用)を送信しようとしているため、200 ステータスの送信から問題が発生します。

ヘッダーの詳細については、http://en.wikipedia.org/wiki/List_of_HTTP_header_fieldsを参照してください。

よろしくお願いします、Zhirayr G.

于 2012-06-25T23:37:39.480 に答える