/** * Returns the path to a PHP interpreter. * * PHPUnit_Util_PHP::$phpBinary contains the path to the PHP * interpreter. * * When not set, the following assumptions will be made: * * 1. When the PHP CLI/CGI binary configured with the PEAR Installer * (php_bin configuration value) is readable, it will be used. * * 2. When PHPUnit is run using the CLI SAPI and the $_SERVER['_'] * variable does not contain the string "PHPUnit", $_SERVER['_'] * is assumed to contain the path to the current PHP interpreter * and that will be used. * * 3. When PHPUnit is run using the CLI SAPI and the $_SERVER['_'] * variable contains the string "PHPUnit", the file that $_SERVER['_'] * points to is assumed to be the PHPUnit TextUI CLI wrapper script * "phpunit" and the binary set up using #! on that file's first * line of code is assumed to contain the path to the current PHP * interpreter and that will be used. * * 4. The current PHP interpreter is assumed to be in the $PATH and * to be invokable through "php". * * @return string */ public static function getPhpBinary() { if (self::$phpBinary === NULL) { if (is_readable('/usr/local/bin/php')) { self::$phpBinary = '/usr/local/bin/php'; } else { if (PHP_SAPI == 'cli' && isset($_SERVER['_']) && strpos($_SERVER['_'], 'phpunit') !== FALSE) { $file = file($_SERVER['_']); $tmp = explode(' ', $file[0]); self::$phpBinary = trim($tmp[1]); } } if (!is_readable(self::$phpBinary)) { self::$phpBinary = 'php'; } else { self::$phpBinary = escapeshellcmd(self::$phpBinary); } } return self::$phpBinary; }