0

いくつかの相互接続されたスクリプトで構成されるかなり複雑なサード パーティ スクリプトを実装しようとしています。スクリプトのイントロを私の簡単なページに含めました。スクリプトは基本的に、ロジックに基づいてさまざまなものを文字列に書き込み、最後に文字列をエコーし​​ます。フォームをエコーする場合があり、送信をクリックすると、スクリプトが再度実行され、新しいロジックに基づいて、以前のフォームの代わりに含まれているページ内に表示される別のテキストがエコーされます。(私のページに含まれるサードパーティのスクリプトには、独自のインクルードも含まれています。)

私の問題は、エコーするものの一部、特にエラー os 成功メッセージをエコーするのではなく、サイトの別のページにリダイレクトしたい場合があることです。

私は自分の他のページでこれを成功させました。いくつかのヘッダー タイプ コードを記述するスクリプトをページに含めます。スクリプトを呼び出す特定のパラメーターまたはユーザーによるアクションに基づいて、インクルードはそれ自体または別のページにリダイレクトされる場合があります。確認しなければならない唯一のことは、リダイレクトの前にインクルードの過程でスペースやテキストが書き込まれていないことです。

ただし、このサードパーティのスクリプトを使用すると、すべての空白を削除したと思いますが、リダイレクトできません。エラーメッセージは、サードパーティのスクリプトを含む私のページに書かれたコードを示しています. メッセージは次のとおりです。

Warning: Cannot modify header information - headers already sent by (output started at /blah blah/stepone.php:5).  

ステップ 1 は、サード パーティのスクリプトを呼び出す簡単なページです。

現在表示されているテキストがある場合でも、インクルードがユーザー アクションに応答してリダイレクトできるというのは正しいですか? サードパーティのスクリプトで空白をチェックしているだけなのか、それとも構造的な問題が間違っているのでしょうか。

サードパーティのスクリプトは大きすぎてここに入れることができません。それ以外の場合は入れます。

ありがとう。

4

3 に答える 3

1

必要なのは、おそらくob_start(). これにより、出力がバッファリングされ、出力が既に生成されている場合でもリダイレクトできます。

マニュアルもチェックしてください: http://php.net/manual/en/function.ob-start.php

于 2012-07-18T14:36:44.567 に答える
1

あなたが言及したエラーは、ヘッダーが既にブラウザーに送信されているために発生します。ヘッダーを再度送信しようとすると、エラーがスローされます。たとえば。

このようなことをしようとすると。

echo 'Hello World';
header('Location:some/location.php');

エラーが発生する可能性があります。したがって、リダイレクト ヘッダーを一番上に配置することは常に適切です。しかし、それを望まない場合もあります。このような場合、PHP の定義に従って、 php のob_start()を使用して出力バッファリングをオンにすることができます。

この関数は、出力バッファリングをオンにします。出力バッファリングがアクティブである間、スクリプトから出力は送信されず (ヘッダー以外)、出力は内部バッファーに格納されます。

上記のコード例の代わりに、次のようなものを使用できます。

ob_start();
echo 'Hello World';
header('Location:some/location.php');
ob_end_flush();
于 2012-07-18T14:42:25.487 に答える
0

必ず:

  1. ob_start()ファイルの先頭で使用します。
  2. ob_end_flush()ファイルの最後に使用します。
于 2012-07-18T14:42:21.330 に答える