Ejecutar aplicación PHP externa dentro de Symfony/Drupal en un Sandbox

Author Top
enzo

Sé que esto podría ser una situación extraña, pero, a veces es necesario para ejecutar una aplicación externa, tal vez porque la aplicación no tiene un API o simplemente porque sólo necesitamos ejecutar la aplicación y obtener los resultados.

Un forma fácil podría ser sólo incluor el archivo principal de aplicación, pero tal vez no seá posible, porque ambas aplicaciones podrían utilizar los espacios de nombres similares o tratar de recargar mismas bibliotecas, por lo tanto en necesario ejecutar la aplicación utilizando una especie Sandbox.

Para ejecutar estatarea, podemos utilizar el componente de Symfony Process.

Con el siguirnte código podras incluir en tu aplicación Symfony o Drupal 8 otro aplicación ejecutada por medio de un Sandbox.

use Symfony\Component\Process\PhpProcess;

$php_script = file_get_contents($php_file);

$phpProcess = new PhpProcess($php_script, $documentroot);
$phpProcess->run();
$output = $phpProcess->getOutput();

En primer lugar, debemos leer archivo principal PHP de la aplicación que deseamos ejecutar en un Sandbox, que se define en la variable $php_file, entonces la funcion PhpProcess ejecutara la aplicación desde el DocumentRoot específicado en la variable $documentroot para nuestra aplicación externa, que evitará cualquier problema relacionado con clases no encontradas.

En segundo lugar, se ejecuta el proceso y, finalmente, podemos obtener la salida después de que la ejecución de nuestra aplicación externa se haya completado, este proceso es síncrono.

Internamente el componente Symfony Process, intenta encontrar la ubicación deel php-cli en tu sistema para ejecutar la aplicación.

Espero que hayas encontrado esta entrada útil.