Интерпретация 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, который был разработан для запуска браузера.