Запуск 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

Comments

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *