0

phpスクリプトを呼び出して別のページを解析し、表示したいページの部分を返すWebサイトでajaxを使用しています。私は過去にこの手法を使用しましたが、今回は返されるページの一部にphpコードが含まれていて、phpコードが処理されずに生で返されることを除いて、うまく機能します。

これは、解析を実行して結果を返すphpスクリプトです。

require_once('simple_html_dom.php');
$dom = new simple_html_dom;

if(isset($_GET['url']))  {
    $url = $_GET['url'];
    $html = file_get_html($url);
    /*get contents*/
    $contents = $html->getElementById('content');
    echo $contents;
}

$ contentsで返されるものは、処理中の$ contents文字列内のphpコードなしで生で返されると述べたように、$ contents文字列を返す前にphpコードを処理するにはどうすればよいですか?

よろしくお願いします。

4

1 に答える 1

1

別のPHPスクリプトによって生成されたHTMLを解析することは、かなりハックです。新しいサイトを開発する場合は、少なくともPHPスクリプトを関数に分割してから、AJAXリクエストの場合は必要な関数のみを呼び出す必要があります。

既存の複雑なサイトで作業している場合でも、jQueryの.load()を使用すると、サーバーの応答の特定のフラグメントをドキュメントに挿入し、残りを破棄できることに注意してください。

$('#content').load('script.php #content');

そうは言っても、あなたが求めていることは可能です:

  • PHPの出力制御関数を使用すると、スクリプトの出力を文字列としてキャプチャできます。これは、str_get_html()を使用して解析できます。これを機能させるには、既存のPHPスクリプトを含める必要があります。含めるスクリプトはすべて、グローバル関数と変数、スーパーグローバル、およびクラスにアクセスできることに注意してください。

    警告:ファイルインクルード攻撃を防ぐために、要求されたファイル名を特定のファイルのホワイトリストと照合してください。URLをブラックリストに登録し、allow_url_fopenを無効にするだけでは、サイトを保護するのに十分ではありません。

    ob_start();
    require $filename; // might have to be outside of a function
    $html = str_get_html(ob_get_clean());
    
  • または、 file_get_contents()またはcURL(ファイル名ではなく絶対URLを指定)を使用して、AJAXスクリプトに独自のHTTPリクエストを作成させることもできます。Webサーバーを別の方法で構成しない限り、この内部要求はWebサーバーのアクセスログに127.0.0.1またはWebサーバーのIPアドレスからのものとして表示されます。

于 2012-12-30T07:22:50.287 に答える