xref: /plugin/combo/vendor/symfony/process/PhpExecutableFinder.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
1404fd306cSNickeau/**
1504fd306cSNickeau * An executable finder specifically designed for the PHP executable.
1604fd306cSNickeau *
1704fd306cSNickeau * @author Fabien Potencier <fabien@symfony.com>
1804fd306cSNickeau * @author Johannes M. Schmitt <schmittjoh@gmail.com>
1904fd306cSNickeau */
2004fd306cSNickeauclass PhpExecutableFinder
2104fd306cSNickeau{
2204fd306cSNickeau    private $executableFinder;
2304fd306cSNickeau
2404fd306cSNickeau    public function __construct()
2504fd306cSNickeau    {
2604fd306cSNickeau        $this->executableFinder = new ExecutableFinder();
2704fd306cSNickeau    }
2804fd306cSNickeau
2904fd306cSNickeau    /**
3004fd306cSNickeau     * Finds The PHP executable.
3104fd306cSNickeau     *
3204fd306cSNickeau     * @return string|false
3304fd306cSNickeau     */
3404fd306cSNickeau    public function find(bool $includeArgs = true)
3504fd306cSNickeau    {
3604fd306cSNickeau        if ($php = getenv('PHP_BINARY')) {
3704fd306cSNickeau            if (!is_executable($php)) {
38*83c68632SNico                $command = '\\' === \DIRECTORY_SEPARATOR ? 'where' : 'command -v --';
3904fd306cSNickeau                if ($php = strtok(exec($command.' '.escapeshellarg($php)), \PHP_EOL)) {
4004fd306cSNickeau                    if (!is_executable($php)) {
4104fd306cSNickeau                        return false;
4204fd306cSNickeau                    }
4304fd306cSNickeau                } else {
4404fd306cSNickeau                    return false;
4504fd306cSNickeau                }
4604fd306cSNickeau            }
4704fd306cSNickeau
4804fd306cSNickeau            if (@is_dir($php)) {
4904fd306cSNickeau                return false;
5004fd306cSNickeau            }
5104fd306cSNickeau
5204fd306cSNickeau            return $php;
5304fd306cSNickeau        }
5404fd306cSNickeau
5504fd306cSNickeau        $args = $this->findArguments();
5604fd306cSNickeau        $args = $includeArgs && $args ? ' '.implode(' ', $args) : '';
5704fd306cSNickeau
5804fd306cSNickeau        // PHP_BINARY return the current sapi executable
59*83c68632SNico        if (\PHP_BINARY && \in_array(\PHP_SAPI, ['cli', 'cli-server', 'phpdbg'], true)) {
6004fd306cSNickeau            return \PHP_BINARY.$args;
6104fd306cSNickeau        }
6204fd306cSNickeau
6304fd306cSNickeau        if ($php = getenv('PHP_PATH')) {
6404fd306cSNickeau            if (!@is_executable($php) || @is_dir($php)) {
6504fd306cSNickeau                return false;
6604fd306cSNickeau            }
6704fd306cSNickeau
6804fd306cSNickeau            return $php;
6904fd306cSNickeau        }
7004fd306cSNickeau
7104fd306cSNickeau        if ($php = getenv('PHP_PEAR_PHP_BIN')) {
7204fd306cSNickeau            if (@is_executable($php) && !@is_dir($php)) {
7304fd306cSNickeau                return $php;
7404fd306cSNickeau            }
7504fd306cSNickeau        }
7604fd306cSNickeau
7704fd306cSNickeau        if (@is_executable($php = \PHP_BINDIR.('\\' === \DIRECTORY_SEPARATOR ? '\\php.exe' : '/php')) && !@is_dir($php)) {
7804fd306cSNickeau            return $php;
7904fd306cSNickeau        }
8004fd306cSNickeau
8104fd306cSNickeau        $dirs = [\PHP_BINDIR];
8204fd306cSNickeau        if ('\\' === \DIRECTORY_SEPARATOR) {
8304fd306cSNickeau            $dirs[] = 'C:\xampp\php\\';
8404fd306cSNickeau        }
8504fd306cSNickeau
8604fd306cSNickeau        return $this->executableFinder->find('php', false, $dirs);
8704fd306cSNickeau    }
8804fd306cSNickeau
8904fd306cSNickeau    /**
9004fd306cSNickeau     * Finds the PHP executable arguments.
9104fd306cSNickeau     *
9204fd306cSNickeau     * @return array
9304fd306cSNickeau     */
9404fd306cSNickeau    public function findArguments()
9504fd306cSNickeau    {
9604fd306cSNickeau        $arguments = [];
9704fd306cSNickeau        if ('phpdbg' === \PHP_SAPI) {
9804fd306cSNickeau            $arguments[] = '-qrr';
9904fd306cSNickeau        }
10004fd306cSNickeau
10104fd306cSNickeau        return $arguments;
10204fd306cSNickeau    }
10304fd306cSNickeau}
104