Интерпретация JavaScript в PHP - PullRequest
14 голосов
/ 02 декабря 2010

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

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

Понижающее голосование: Я действительно не вижу, что такого противоречивого в этом вопросе, современные веб-сканеры, как известно, делают это, единственноеРазница в том, что они, как правило, не написаны на PHP.[1]

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

Ответы [ 3 ]

5 голосов
/ 05 декабря 2010

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

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

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

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

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

4 голосов
/ 21 октября 2013

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

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

1 голос
/ 05 декабря 2010

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

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

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

...