MediaWiki  master
ExecutableFinder.php
Go to the documentation of this file.
1 <?php
22 
29 
37  protected static function getPossibleBinPaths() {
38  return array_unique( array_merge(
39  [ '/usr/bin', '/bin', '/usr/local/bin', '/opt/csw/bin',
40  '/usr/gnu/bin', '/usr/sfw/bin', '/sw/bin', '/opt/local/bin' ],
41  explode( PATH_SEPARATOR, getenv( 'PATH' ) )
42  ) );
43  }
44 
62  protected static function findExecutable( $path, $name, $versionInfo = false ) {
63  $command = $path . DIRECTORY_SEPARATOR . $name;
64 
65  Wikimedia\suppressWarnings();
66  $file_exists = is_executable( $command );
67  Wikimedia\restoreWarnings();
68 
69  if ( $file_exists ) {
70  if ( !$versionInfo ) {
71  return $command;
72  }
73 
74  $output = Shell::command( $command, $versionInfo[0] )
75  ->includeStderr()->execute()->getStdout();
76  if ( strstr( $output, $versionInfo[1] ) !== false ) {
77  return $command;
78  }
79  }
80 
81  return false;
82  }
83 
96  public static function findInDefaultPaths( $names, $versionInfo = false ) {
97  if ( Shell::isDisabled() ) {
98  // If we can't shell out, there's no point looking for executables
99  return false;
100  }
101 
102  $paths = self::getPossibleBinPaths();
103  foreach ( (array)$names as $name ) {
104  foreach ( $paths as $path ) {
105  $exe = self::findExecutable( $path, $name, $versionInfo );
106  if ( $exe !== false ) {
107  return $exe;
108  }
109  }
110  }
111 
112  return false;
113  }
114 
115 }
static getPossibleBinPaths()
Get an array of likely places we can find executables.
$command
Definition: cdb.php:65
static findExecutable( $path, $name, $versionInfo=false)
Search a path for any of the given executable names.
static findInDefaultPaths( $names, $versionInfo=false)
Same as locateExecutable(), but checks in getPossibleBinPaths() by default.