2015-08-18 00:00:26 +00: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 .
*
2018-11-23 12:29:20 +00:00
* $p = new PhpProcess ( '<?php echo "foo"; ?>' );
* $p -> run ();
* print $p -> getOutput () . " \n " ;
2015-08-18 00:00:26 +00:00
*
* @ author Fabien Potencier < fabien @ symfony . com >
*/
class PhpProcess extends Process
{
/**
2015-11-17 21:42:33 +00:00
* @ 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
* @ param array $options An array of options for proc_open
2015-08-18 00:00:26 +00:00
*/
2018-11-23 12:29:20 +00:00
public function __construct ( $script , $cwd = null , array $env = null , $timeout = 60 , array $options = null )
2015-08-18 00:00:26 +00:00
{
$executableFinder = new PhpExecutableFinder ();
2018-11-23 12:29:20 +00:00
if ( false === $php = $executableFinder -> find ( false )) {
2015-08-18 00:00:26 +00:00
$php = null ;
2018-11-23 12:29:20 +00:00
} else {
$php = array_merge ( array ( $php ), $executableFinder -> findArguments ());
2015-08-18 00:00:26 +00:00
}
2018-11-23 12:29:20 +00:00
if ( 'phpdbg' === \PHP_SAPI ) {
2016-04-20 16:56:34 +00:00
$file = tempnam ( sys_get_temp_dir (), 'dbg' );
file_put_contents ( $file , $script );
register_shutdown_function ( 'unlink' , $file );
2018-11-23 12:29:20 +00:00
$php [] = $file ;
2016-04-20 16:56:34 +00:00
$script = null ;
}
2018-11-23 12:29:20 +00:00
if ( null !== $options ) {
@ trigger_error ( sprintf ( 'The $options parameter of the %s constructor is deprecated since Symfony 3.3 and will be removed in 4.0.' , __CLASS__ ), E_USER_DEPRECATED );
2016-04-20 16:56:34 +00:00
}
2015-08-18 00:00:26 +00:00
parent :: __construct ( $php , $cwd , $env , $script , $timeout , $options );
}
/**
* Sets the path to the PHP binary to use .
*/
public function setPhpBinary ( $php )
{
$this -> setCommandLine ( $php );
}
/**
* { @ inheritdoc }
*/
2018-11-23 12:29:20 +00:00
public function start ( callable $callback = null /*, array $env = array()*/ )
2015-08-18 00:00:26 +00:00
{
if ( null === $this -> getCommandLine ()) {
throw new RuntimeException ( 'Unable to find the PHP executable.' );
}
2018-11-23 12:29:20 +00:00
$env = 1 < \func_num_args () ? func_get_arg ( 1 ) : null ;
2015-08-18 00:00:26 +00:00
2018-11-23 12:29:20 +00:00
parent :: start ( $callback , $env );
2015-08-18 00:00:26 +00:00
}
}