2009-07-07 12 views
2

URLを変更するPHPスクリプトが含まれています。含まれているPHPスクリプトが場所のURLを変更しないようにするにはどうすればよいですか?

// 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()呼び出しを取り除いて、それがクライアントに届かないようにする方法はありますか?

答えて

5

今後の参照用です。 PHP 5.3以降、このような状況に対処するためのheader_remove()という新しい関数があります。

3

次のような、無効な値とそのヘッダフィールドを上書きしようとすることができます:

header('Location: ', true); 

しかし、私は、クライアントがその上でどのように反応するか分かりません。

2

本当に良い方法はありません。

  1. script.phpをテキストファイルとして開き、header()コマンドを削除してから結果をeval()します。
  2. script.phpをインクルードする前にスペースをエコーし​​、出力が既に開始された後にPHPがheader()を発行する際に生成される警告をトラップします。出力バッファリングの前にスペースをエコーする必要があります。 (私はPHPコードとしてPHPの文字列を解析するために使用邪悪な言葉に言及しています)、file_get_contents()と変数として最初のファイルを含む不要なヘッダを除去した後、PHPコードとそれを実行する方法について
1

何?

+0

悪い:eval :) –

0

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

1

あなたが自由にPHP5.3を持っていない場合(おそらくそうではありません)、Gumbo's answerは機能せず、evalを使用したくない場合は、私が見ることができる唯一の他のオプションは、 streams。しかしこれは、もう一つの、より柔軟で複雑な評価の形式です。ストリームをtokenizerと組み合わせると、その関数呼び出しを単純に取り除くことができます:

require 'no-header://script.php'; 
関連する問題