14

Я хотел бы иметь возможность запускать JavaScript и получать результаты с помощью PHP и задается вопросом, есть ли библиотека для PHP, которая позволяет мне разбирать ее. Моя первая мысль заключалась в использовании node.js, но поскольку node.js имеет доступ к сокетам, файлам и вещам, я думаю, что я предпочел бы избежать этого.Интерпретация JavaScript в PHP

Обоснование: Я делаю экран выскабливание в PHP и столкнулись с множеством сценариев, в которых данные вырабатываться JavaScript на веб-интерфейсе, и я хотел бы избежать написания специальных функций фильтрации действовать на JavaScript на в каждом случае, так как это занимает много времени. Более общим случаем будет анализ JavaScript непосредственно.

Downvoting: Я не очень понимаю, что это так спорно об этом вопросе, современные поисковые роботы, как известно, сделать это, единственное отличие состоит в том, что они, как правило, не могут быть написаны на PHP. [1]

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

+6

Почему в мире вы хотите сделать это?!?!? Если вы * должны сделать это, вы можете скомпилировать и запустить интерпретатор JavaScript CLI: http://code.google.com/p/v8/. – Blender 2010-12-02 05:22:59

+3

с какой целью? PHP уже имеет множество функций даты. – stillstanding 2010-12-02 05:23:24

ответ

5

Это интересный вопрос, и нисходящие избиратели невообразимы в отношении потенциальных прецедентов. Инструменты архивации страниц, сценарии печати, изображения предварительного просмотра - все обоснованные причины, позволяющие манипулировать документом с помощью JavaScript, включенного в страницу.

Я не знаю каких-либо существующих реализаций PHP, но вы, вероятно, можете адаптировать Mozilla SpiderMonkey в качестве модуля PHP или как отдельный инструмент для управления DOMDocument и возврата результата.

Я не имел опыта работы с серверной стороны JavaScript, но некоторые вопросы, которые я считаю, возможно, придется иметь дело с:

  • объектов хозяевах как document и window не являются частью спецификации ECMAScript (эти являются объектами, предоставляемыми браузером-исполнителем), поэтому вам нужно убедиться, что библиотека предоставляет эквивалентные объекты хоста.
  • У вас могут возникнуть проблемы с безопасностью при выполнении сценариев на стороне клиента в серверной среде. Это очень похоже на то, что пользователь может представить PHP-скрипт для оценки, поэтому вам нужно убедиться, что изолированная программная среда безопасности.

Другой (возможно) безопаснее и проще реализовать вариант может быть использование модифицированного FireFox или WebKit экземпляра, который работает как браузер, загружая целевые страницы и возвращение источника модифицирована к приложению.

1

NodeJS (или какой-либо другой производной v8 Google) может быть на самом деле лучший способ пойти сюда. Если вас беспокоят различные вещи, которые может выполнять nodejs (например, сокеты и т. Д.), Вы, вероятно, можете «разбить его», удалив модули и/или аддоны - я думаю, что даже встроенный материал в конечном итоге реализован в таком что его можно было бы легко удалить.

Альтернативный подход может заключаться в простом замене, переопределении или удалении функции require от node.js.

Существует также envjs, который должен облегчить запуск js, который был разработан для запуска браузера.

+0

Я никогда раньше не видел envjs, это действительно интересно. Я буду изучать его дальше, спасибо. :) – 2010-12-05 10:46:24

4

Из PHP 5.3 вы можете использовать V8JS extention from PHP. Это родная библиотека, которая использует новый механизм Javascript Google V8 для выполнения JS и возврата результата.

Это хорошо, потому что вы можете передать ВАР в PHP массивы и интерпретируются очень хорошо

Смежные вопросы