2011-01-02 17 views
1

PHPスクリプトを実行し、その出力を返す関数を作成しました。これを行うより良い方法があるかどうかを知りたいのですが、これは私の回避策のようです。スクリプトはローカルなので、page_get_contents(完全なURL)を使用するのは時間がかかるのでむしろ無駄に思えます。PHPスクリプトからローカルPHPスクリプトを起動し、GETパラメータを渡す

function runpage($path, $query) { 
    parse_str($query, $_GET); 
    $oldquery = $_SERVER["QUERY_STRING"]; 
    $_SERVER["QUERY_STRING"] = $query; 
    ob_start(); 
    include $path; 
    $out = ob_get_contents(); 
    ob_end_clean(); 
    $_SERVER["QUERY_STRING"] = $oldquery; 
    return $out; 
} 

ありがとうございます!

+0

実際には 'file_get_contents'を使うのは無駄になりません – Ben

+1

' $ _SERVER ['QUERY_STRING'] 'を元に戻すことを忘れました。 – rik

+0

@rik:この特定のスクリプトでは、私は$ _SERVER ['QUERY_STRING']を使用しませんが、あなたは正しいです。私はそれを変更します。もちろん、その変更が反映されていれば、$ oldquery変数は実行されるスクリプトによって変更される可能性があります。 @Ben:これはあまり無駄にならないように少し混乱しています。 – skeggse

答えて

1

はい、クルージュです。いいえ、それほど良い方法はありません。

このスニペットの全体が回避策になります。インクルードされたスクリプトを非常によく書き直し、別の配列から入力変数を読み込み、関数呼び出しで出力を正しく返すようにすることができます。または、実行可能なスクリプトに変換し、$_GETの代わりにargvにアクセスすることもできますが、これには同じ量のリストラが必要です。

はい、それは厄介です。しかし、それを乗り越える。シェルスクリプトとパイプは、このPHPインクルードよりも決してクリーンではありません($ _GETオーバーライドとは別に、テンプレート化と似ています)。それにかかわらず、厄介なことは失敗することを意味しません。これを通常の構造にしないでください。

+0

それは私の疑惑を確認していただきありがとうございます。 – skeggse

関連する問題