Necesito ejecutar un script de nodo dentro de mi aplicación Laravel.
Intenté usar el Proceso de Symfony, pero eliminó el proceso después de la ejecución de PHP y necesito mantener el proceso del nodo en ejecución, así que mi siguiente paso fue tratar de usar las funciones shell_exec
y exec
. Funcionó bien en Tinker y en Tinkerwell, pero cuando trato de usarlo dentro de la clase Laravel, da el siguiente error 500:
production.ERROR: Call to undefined function shell_exec() {"exception":"[object] (Error(code: 0): Call to undefined function shell_exec() at ...
Como es un VPS, configuré mi php.ini para disable_functions=
pero aún no funciona dentro de Laravel, solo si lo uso fuera del marco.
Gracias de antemano y perdón por mi mal inglés.
Desafortunadamente, esto no se puede hacer con exec()
(ni system()
o shell_exec()
).
Pero si instala la extensión pcntl , defina algo como:
<?php function detached_exec($cmd) { $pid = pcntl_fork(); if ($pid == 0) { // Childe process main-loop goes here. posix_setsid(); exec($cmd); exit(0); } else if ($pid == -1) { // Process fork failed. return FALSE; } return $pid; }
Y usar como:
// Edit this: $cmd = 'node --version'; $pid = detached_exec($cmd); if($pid === FALSE) { echo 'exec failed'; }
Terminé rindiéndome. He desarrollado una solución.
En lugar de llamar al archivo de nodo por PHP, hice un script de nodo con express que recibe una solicitud POST e inicia el código.
Ahora puedo poner mi código de nodo en otro servidor y seguirá funcionando sin problemas y hará que mi sistema sea escalable.