Запуск node.js из PHP c параметрами
В процессе разработки иногда возникает необходимость из PHP запустить скрипт на node.js и передать параметры, а в node.js получить эти параметры и использовать их. А также вернуть результат обработки назад в PHP. Запуск из PHP будет произведен при помощи команды shell_exec — это будет равносильно тому, что мы бы запустили скрипт (node index.js 1 2) из командной строки. Ниже пример кода, как это сделать. Код PHP файла:
$param1 = '1'; $param2 = '2'; $buf = shell_exec('node index.js $param1 $param2'); echo $buf;
Код node.js файла
for(let arg of process.argv){ console.log(`Массив входящих аргументов-> : ${arg}`); }
Результат будет такой:
Массив входящих аргументов-> : /usr/bin/node Массив входящих аргументов-> : /var/www/user/data/www/ae-nekrasov.ru/testoflern/index.js Массив входящих аргументов-> : 1 Массив входящих аргументов-> : 2
Аргументы передаются отделенные пробелами. Входящие аргументы находятся в process.argv, но при этом в первых двух ячейках будут служебные данные, это следует учитывать, при обращении к ним из node.js. В данном примере они просто выводятся в цикле for, в реальном скрипте их можно использовать для передачи каких-то необходимых данных, для работы скрипта. В примере использован вывод в ` ` — так как это позволяет подставлять значения в строку, без конкатенации.
Также можно передавать массив из PHP в node.js, для этого необходимо использовать функцию преобразования массива в json и уже эти данные отправлять. Также необходимо массив упаковать в два вида кавычек одинарные, а уже название ключей и значения в двойные, для построения правильной строки, чтобы на стороне node.js сработала функция JSON.parse для преобразования строки в объект. Пример PHP кода:
$param1 = array('"name"' => '"John"','"lastname"' => '"Smith"','"age"' => '"24"','"city"' => '"Moscow"'); $param2 = '2'; $paramjson = json_encode($param1); $buf = shell_exec('node index444.js $paramjson $param2'); echo $buf;
Теперь на стороне node.js преобразуем строку в объект, пример:
var stingtoobj = JSON.parse(process.argv[2]); console.log(`Вывод данных : ${stingtoobj.name}`);
В итоге мы получили объект из строки, которая пришла от PHP и выводим имя, результат будет такой: Вывод данных : John