104fd306cSNickeau<?php 204fd306cSNickeau 304fd306cSNickeau/* 404fd306cSNickeau * This file is part of the Symfony package. 504fd306cSNickeau * 604fd306cSNickeau * (c) Fabien Potencier <fabien@symfony.com> 704fd306cSNickeau * 804fd306cSNickeau * For the full copyright and license information, please view the LICENSE 904fd306cSNickeau * file that was distributed with this source code. 1004fd306cSNickeau */ 1104fd306cSNickeau 1204fd306cSNickeaunamespace Symfony\Component\Process; 1304fd306cSNickeau 1404fd306cSNickeauuse Symfony\Component\Process\Exception\LogicException; 1504fd306cSNickeauuse Symfony\Component\Process\Exception\RuntimeException; 1604fd306cSNickeau 1704fd306cSNickeau/** 1804fd306cSNickeau * PhpProcess runs a PHP script in an independent process. 1904fd306cSNickeau * 2004fd306cSNickeau * $p = new PhpProcess('<?php echo "foo"; ?>'); 2104fd306cSNickeau * $p->run(); 2204fd306cSNickeau * print $p->getOutput()."\n"; 2304fd306cSNickeau * 2404fd306cSNickeau * @author Fabien Potencier <fabien@symfony.com> 2504fd306cSNickeau */ 2604fd306cSNickeauclass PhpProcess extends Process 2704fd306cSNickeau{ 2804fd306cSNickeau /** 2904fd306cSNickeau * @param string $script The PHP script to run (as a string) 3004fd306cSNickeau * @param string|null $cwd The working directory or null to use the working dir of the current PHP process 3104fd306cSNickeau * @param array|null $env The environment variables or null to use the same environment as the current PHP process 3204fd306cSNickeau * @param int $timeout The timeout in seconds 3304fd306cSNickeau * @param array|null $php Path to the PHP binary to use with any additional arguments 3404fd306cSNickeau */ 35*83c68632SNico public function __construct(string $script, ?string $cwd = null, ?array $env = null, int $timeout = 60, ?array $php = null) 3604fd306cSNickeau { 3704fd306cSNickeau if (null === $php) { 3804fd306cSNickeau $executableFinder = new PhpExecutableFinder(); 3904fd306cSNickeau $php = $executableFinder->find(false); 4004fd306cSNickeau $php = false === $php ? null : array_merge([$php], $executableFinder->findArguments()); 4104fd306cSNickeau } 4204fd306cSNickeau if ('phpdbg' === \PHP_SAPI) { 4304fd306cSNickeau $file = tempnam(sys_get_temp_dir(), 'dbg'); 4404fd306cSNickeau file_put_contents($file, $script); 4504fd306cSNickeau register_shutdown_function('unlink', $file); 4604fd306cSNickeau $php[] = $file; 4704fd306cSNickeau $script = null; 4804fd306cSNickeau } 4904fd306cSNickeau 5004fd306cSNickeau parent::__construct($php, $cwd, $env, $script, $timeout); 5104fd306cSNickeau } 5204fd306cSNickeau 5304fd306cSNickeau /** 5404fd306cSNickeau * {@inheritdoc} 5504fd306cSNickeau */ 56*83c68632SNico public static function fromShellCommandline(string $command, ?string $cwd = null, ?array $env = null, $input = null, ?float $timeout = 60) 5704fd306cSNickeau { 5804fd306cSNickeau throw new LogicException(sprintf('The "%s()" method cannot be called when using "%s".', __METHOD__, self::class)); 5904fd306cSNickeau } 6004fd306cSNickeau 6104fd306cSNickeau /** 6204fd306cSNickeau * {@inheritdoc} 6304fd306cSNickeau */ 64*83c68632SNico public function start(?callable $callback = null, array $env = []) 6504fd306cSNickeau { 6604fd306cSNickeau if (null === $this->getCommandLine()) { 6704fd306cSNickeau throw new RuntimeException('Unable to find the PHP executable.'); 6804fd306cSNickeau } 6904fd306cSNickeau 7004fd306cSNickeau parent::start($callback, $env); 7104fd306cSNickeau } 7204fd306cSNickeau} 73