xref: /plugin/combo/vendor/symfony/process/PhpProcess.php (revision 83c6863253ba0b92605aa8dceca974358d439aaa)
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