2017-07-03 19:04:27 +02:00
< ? php
/*
* This file is part of the Symfony package .
*
* ( c ) Fabien Potencier < fabien @ symfony . com >
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
namespace Symfony\Component\Process ;
use Symfony\Component\Process\Exception\RuntimeException ;
/**
* PhpProcess runs a PHP script in an independent process .
*
2020-01-17 10:58:01 +01:00
* $p = new PhpProcess ( '<?php echo "foo"; ?>' );
* $p -> run ();
* print $p -> getOutput () . " \n " ;
2017-07-03 19:04:27 +02:00
*
* @ author Fabien Potencier < fabien @ symfony . com >
*/
class PhpProcess extends Process
{
/**
* @ param string $script The PHP script to run ( as a string )
* @ param string | null $cwd The working directory or null to use the working dir of the current PHP process
* @ param array | null $env The environment variables or null to use the same environment as the current PHP process
* @ param int $timeout The timeout in seconds
2020-01-17 10:58:01 +01:00
* @ param array | null $php Path to the PHP binary to use with any additional arguments
2017-07-03 19:04:27 +02:00
*/
2020-01-17 10:58:01 +01:00
public function __construct ( string $script , string $cwd = null , array $env = null , int $timeout = 60 , array $php = null )
2017-07-03 19:04:27 +02:00
{
2020-01-17 10:58:01 +01:00
if ( null === $php ) {
$executableFinder = new PhpExecutableFinder ();
$php = $executableFinder -> find ( false );
$php = false === $php ? null : array_merge ([ $php ], $executableFinder -> findArguments ());
2017-07-03 19:04:27 +02:00
}
2018-08-07 10:42:11 +02:00
if ( 'phpdbg' === \PHP_SAPI ) {
2017-07-03 19:04:27 +02:00
$file = tempnam ( sys_get_temp_dir (), 'dbg' );
file_put_contents ( $file , $script );
register_shutdown_function ( 'unlink' , $file );
$php [] = $file ;
$script = null ;
}
2020-01-17 10:58:01 +01:00
parent :: __construct ( $php , $cwd , $env , $script , $timeout );
2017-07-03 19:04:27 +02:00
}
/**
* Sets the path to the PHP binary to use .
2020-01-17 10:58:01 +01:00
*
* @ deprecated since Symfony 4.2 , use the $php argument of the constructor instead .
2017-07-03 19:04:27 +02:00
*/
public function setPhpBinary ( $php )
{
2020-01-17 10:58:01 +01:00
@ trigger_error ( sprintf ( 'The "%s()" method is deprecated since Symfony 4.2, use the $php argument of the constructor instead.' , __METHOD__ ), E_USER_DEPRECATED );
2017-07-03 19:04:27 +02:00
$this -> setCommandLine ( $php );
}
/**
* { @ inheritdoc }
*/
2020-01-17 10:58:01 +01:00
public function start ( callable $callback = null , array $env = [])
2017-07-03 19:04:27 +02:00
{
if ( null === $this -> getCommandLine ()) {
throw new RuntimeException ( 'Unable to find the PHP executable.' );
}
parent :: start ( $callback , $env );
}
}