15

JavaScriptを実行してPHPで結果を取得できるようにしたいのですが、それを解析できるPHP用のライブラリがあるかどうか疑問に思っています。私が最初に考えたのはnode.jsを使用することでしたが、node.jsはソケットやファイルなどにアクセスできるため、それを避けたいと思います。

理論的根拠:私はPHPでスクリーンスクレイピングを行っており、データがフロントエンドでJavaScriptによって生成される多くのシナリオに遭遇しました。それ以来、JavaScriptに基づいて動作する特殊なフィルタリング関数を作成することは避けたいと思います。時間がかかります。より一般的なケースは、JavaScriptを直接解析することです。

反対票:この質問について何がそれほど物議を醸しているのかはよくわかりません。最近のWebクローラーはそれを行うことが知られていますが、唯一の違いは、PHPで記述されていない傾向があることです。[1]

[1] http://blogs.forbes.com/velocity/2010/06/25/google-isnt-just-reading-your-links-its-now-running-your-code/

4

3 に答える 3

6

これは興味深い質問であり、反対票は潜在的なユースケースについて想像を絶するものです。ページアーカイブツール、印刷スクリプト、プレビュー画像-ページに含まれているJavaScriptを使用してドキュメントを操作するすべての正当な理由。

私は既存のPHP実装を知りませんが、おそらくMozillaのSpiderMonkeyをPHPモジュールとして、またはDOMDocumentを操作して結果を返すスタンドアロンツールとして適応させることができます。

サーバーサイドJavaScriptの経験はありませんが、対処する必要があると思われるいくつかの問題があります。

  • のようなホストオブジェクトはECMAScript仕様の一部documentwindowはないため(これらは実装ブラウザによって提供されるオブジェクトです)、ライブラリが同等のホストオブジェクトを提供することを確認する必要があります。
  • サーバー側環境内でのクライアント側スクリプトの実行に関してセキュリティ上の問題が発生する可能性があります。これは、ユーザーが評価用のPHPスクリプトを送信できるようにするのとよく似ているため、セキュリティサンドボックスがしっかりしていることを確認する必要があります。

もう1つの(おそらく)より安全で実装しやすいオプションは、ブラウザーとして実行される変更されたFireFoxまたはWebKitインスタンスを使用し、ターゲットページをロードして、変更されたソースをアプリケーションに返すことです。

于 2010-12-04T23:53:17.503 に答える
4

PHP 5.3からは、PHPのV8JS拡張機能を使用できます。これは、新しいGoogle V8 Javascriptエンジンを使用してJSを実行し、結果を返すネイティブライブラリです。

PHP配列で変数を渡すことができ、非常によく解釈されるので、これは良いことです。

于 2013-10-21T10:45:12.093 に答える
1

NodeJS(またはgoogleのv8の他の派生物)は、実際にはここに行くための最良の方法かもしれません。nodejsが実行できるさまざまなこと(ソケットなど)について懸念がある場合は、モジュールやアドオンを削除することで、おそらく「それを取り除く」ことができます-組み込みのものでさえ、最終的にはそのようなものに実装されると思いますかなり簡単に取り除くことができる方法。

require別のアプローチは、関数をから単純に置換、オーバーライド、または削除することnode.jsです。

ブラウザを実行するように設計されたjsの実行を容易にするenvjsもあります。

于 2010-12-04T22:13:24.097 に答える