Интерпретация JavaScript в PHP

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

Обоснование: Я делаю скрипинг экрана в 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/

Ответы

Ответ 1

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

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

У меня не было опыта работы с серверным JavaScript, но некоторые проблемы, которые, я полагаю, могут быть решены:

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

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

Ответ 2

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

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

Ответ 3

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

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

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