Spaces:
Sleeping
Sleeping
| /* | |
| * 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; | |
| /** | |
| * Generic executable finder. | |
| * | |
| * @author Fabien Potencier <fabien@symfony.com> | |
| * @author Johannes M. Schmitt <schmittjoh@gmail.com> | |
| */ | |
| class ExecutableFinder | |
| { | |
| private $suffixes = array('.exe', '.bat', '.cmd', '.com'); | |
| /** | |
| * Replaces default suffixes of executable. | |
| * | |
| * @param array $suffixes | |
| */ | |
| public function setSuffixes(array $suffixes) | |
| { | |
| $this->suffixes = $suffixes; | |
| } | |
| /** | |
| * Adds new possible suffix to check for executable. | |
| * | |
| * @param string $suffix | |
| */ | |
| public function addSuffix($suffix) | |
| { | |
| $this->suffixes[] = $suffix; | |
| } | |
| /** | |
| * Finds an executable by name. | |
| * | |
| * @param string $name The executable name (without the extension) | |
| * @param string $default The default to return if no executable is found | |
| * @param array $extraDirs Additional dirs to check into | |
| * | |
| * @return string The executable path or default value | |
| */ | |
| public function find($name, $default = null, array $extraDirs = array()) | |
| { | |
| if (ini_get('open_basedir')) { | |
| $searchPath = explode(PATH_SEPARATOR, ini_get('open_basedir')); | |
| $dirs = array(); | |
| foreach ($searchPath as $path) { | |
| // Silencing against https://bugs.php.net/69240 | |
| if (@is_dir($path)) { | |
| $dirs[] = $path; | |
| } else { | |
| if (basename($path) == $name && @is_executable($path)) { | |
| return $path; | |
| } | |
| } | |
| } | |
| } else { | |
| $dirs = array_merge( | |
| explode(PATH_SEPARATOR, getenv('PATH') ?: getenv('Path')), | |
| $extraDirs | |
| ); | |
| } | |
| $suffixes = array(''); | |
| if ('\\' === DIRECTORY_SEPARATOR) { | |
| $pathExt = getenv('PATHEXT'); | |
| $suffixes = array_merge($suffixes, $pathExt ? explode(PATH_SEPARATOR, $pathExt) : $this->suffixes); | |
| } | |
| foreach ($suffixes as $suffix) { | |
| foreach ($dirs as $dir) { | |
| if (@is_file($file = $dir.DIRECTORY_SEPARATOR.$name.$suffix) && ('\\' === DIRECTORY_SEPARATOR || is_executable($file))) { | |
| return $file; | |
| } | |
| } | |
| } | |
| return $default; | |
| } | |
| } | |