2

URL を変更する PHP スクリプトを含めています。

// index.php
ob_start();
include "script.php";
   // This script redirects using  header("Location:");
$out = ob_get_clean();
// I use the $out data for calculations
echo $out;

この不要なリダイレクトに対抗または元に戻す簡単な方法はありますか? どうですか:

header("Location: index.php");   // redirect back to self

しかし、これは無限のリダイレクトループを引き起こします...何かアイデアはありますか?

または、$out バッファから header() 呼び出しを取り除いて、クライアントに到達しないようにする方法はありますか?

4

6 に答える 6

5

今後の参考のために。PHP 5.3 では、このような状況に対処するのに役立つheader_remove()という新しい関数があります。

于 2009-07-07T09:37:37.757 に答える
3

次のように、そのヘッダー フィールドを無効な値で上書きしようとする可能性があります。

header('Location: ', true);

しかし、クライアントがそれに対してどのように反応するかはわかりません。

于 2009-07-07T09:33:31.197 に答える
2

それを行う良い方法は本当にありません。次の 2 つのことが思い浮かびます。

  1. script.php をテキスト ファイルとして開き、すべての header() コマンドを削除してから、結果を eval() します。
  2. script.php をインクルードする前にスペースをエコーし​​、出力が既に開始された後で、header() の発行に関して PHP が生成する警告をトラップします。出力バッファリングの前にスペースをエコーする必要があります。
于 2009-07-07T09:34:24.487 に答える
1

まずファイルを で変数としてインクルードfile_get_contents()し、不要なヘッダーを削除してから、PHP コードで実行するのはどうでしょうか (PHP 文字列を PHP コードとして解析するために使用される邪悪な言葉については言及しません)。

于 2009-07-07T09:35:23.440 に答える
1

PHP5.3 を自由に使用できない場合 (おそらく使用しない場合)、ガンボの答えは機能せず、 eval を使用したくない場合、私が見ることができる他の唯一のオプションは、ストリームの使用です。ただし、これはさらに別の、より柔軟ですが複雑な形式の eval です。ストリームをtokenizerと組み合わせると、次の簡単な方法でその関数呼び出しを取り除くことができます。

require 'no-header://script.php';
于 2009-07-07T11:09:41.613 に答える
0

出力する前に文字列に完全なテキストがあるため、必要なヘッダーを検索して置き換えるだけで簡単に削除できます (たとえば、正規表現を使用)。

于 2009-07-07T09:42:53.847 に答える