Выполнить javascript из php

Извините за этот вопрос новичка, я никогда раньше не использовал серверную часть js.

вот моя проблема:

У меня есть некоторый javascript, загруженный с удаленной страницы (он зашифрован, я не могу преобразовать его в php), мне нужно выполнить его и прочитать его вывод.

Как мне это сделать? Я думаю примерно так:

shell_exec('nodejs code...')

а как передать код? Он довольно длинный, около 10 строк javascript.

Другой способ - сохранить js в файл и запустить nodejs script.js, но это будет бесполезный и медленный ввод-вывод диска ...

Взгляните здесь

Hamza Fatmi 12.04.2018 15:52

«загружено с удаленной страницы» - тогда он, вероятно, не предназначен для работы с Node.js и, скорее всего, выйдет из строя, потому что у него нет DOM для доступа.

Quentin 12.04.2018 15:55

@quentin Я уже тестировал, и он работает, мне нужно только немного отредактировать код, прежде чем отправлять его на узел. Но я пытаюсь с классом php V8Js

Sofia Grillo 12.04.2018 16:06
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
409
2

Ответы 2

Не знаю, я не дома с php, правда ли, что php обслуживает html-файлы для пользователя дома, так почему это должно отличаться от использования javascript-файла на обычной html-странице?

нельзя просто использовать: <script src = "myscripts.js"></script> " или <script>"with here your script"</script>

в файл, который нужно загрузить этот javascript?

Это запустит JS на клиенте. Вопрос в том, чтобы запустить его на сервере.

Quentin 12.04.2018 16:10

Да, но OP уже сказал, что считает node JS бесполезным и медленным. Я не уверен, действительно ли OP понимает JS и Node. Он пытается выполнить JS на стороне сервера без Node, а также сделать это из файла PHP.

Nerdi.org 12.04.2018 16:29

Я говорил о создании файла на диск, который работает медленно, а не о node.js

Sofia Grillo 12.04.2018 16:53

Важное предупреждение об использовании exec / shell_exec

Я чувствую необходимость добавить к этому ответу предостережение о безопасности. Всегда будьте осторожны при использовании exec или shell_exec. Практически всегда не следует передавать данные по сети для внедрения в команду оболочки из соображений безопасности. Запись сценария в файл намного безопаснее, поскольку отсутствует риск внедрения команды. Если вы уверены, что такой подход необходим, я вам настоятельно рекомендую.

  1. Используйте функцию PHP побег, которая попытается экранировать управляющие символы оболочки.
  2. На самом деле спросите себя, насколько вы доверяете источнику? И насколько вы доверяете их безопасности?

Было сказано, что. Вот мой первоначальный ответ на заданный вопрос:


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

Например.

 C:\Users\Cmonahan>node -e "console.info('hello world');"
 hello world

Затем вы можете использовать PHP exec или оболочка exec для получения вывода.

Больше информации:

PHP shell_exec () против exec ()

Документация Node CLI

Редактировать: Относительно передачи многострочных аргументов в командную строку. Это может быть чем-то вроде минного поля. Например: это зависит от того, является ли среда Unix-подобной или Windows-подобной, а затем, если Unix-подобной, какая оболочка анализирует команду.

См. Например:

Windows: Как указать многострочную команду в командной строке?

Конец строки (новая строка) экранируется в bash

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

Вот популярный минификатор на основе PHP https://github.com/mrclay/minify, я считаю, что вы сможете установить его через композитор.

Спасибо, вопрос также заключался в том, как передать многострочный скрипт в качестве аргумента оболочки, что-то вроде кодирования base64?

Sofia Grillo 12.04.2018 16:57

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

ChrisM 12.04.2018 18:07

На самом деле - вы проверили, что exec / shell_exec действительно интерпретирует буквальный перевод строки как новую команду? Если нет, то у вас нет проблем. Я не могу найти в Интернете ничего разъясняющего, и у меня нет возможности проверить прямо сейчас.

ChrisM 12.04.2018 18:17

Другие вопросы по теме