You are here

class ExecutableFinder in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/symfony/process/ExecutableFinder.php \Symfony\Component\Process\ExecutableFinder

Generic executable finder.

@author Fabien Potencier <fabien@symfony.com> @author Johannes M. Schmitt <schmittjoh@gmail.com>

Hierarchy

Expanded class hierarchy of ExecutableFinder

1 file declares its use of ExecutableFinder
ExecutableFinderTest.php in vendor/symfony/process/Tests/ExecutableFinderTest.php

File

vendor/symfony/process/ExecutableFinder.php, line 20

Namespace

Symfony\Component\Process
View source
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 = $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;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ExecutableFinder::$suffixes private property
ExecutableFinder::addSuffix public function Adds new possible suffix to check for executable.
ExecutableFinder::find public function Finds an executable by name.
ExecutableFinder::setSuffixes public function Replaces default suffixes of executable.