MediaWiki REL1_35
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}
Utility class to find executables in likely places.
static getPossibleBinPaths()
Get an array of likely places we can find executables.
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.
Executes shell commands.
Definition Shell.php:44
$command
Definition mcc.php:125