/** * Uses a separate process to perform a syntax check on a PHP sourcefile. * * PHPUnit_Util_Fileloader::$phpBinary contains the path to the PHP * interpreter used for this. If unset, 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 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". * * @param string $filename * @throws RuntimeException * @access protected * @static * @since Method available since Release 3.0.0 */ protected static function syntaxCheck($filename) { if (self::$phpBinary === NULL) { if (is_readable('@php_bin@')) { self::$phpBinary = '@php_bin@'; } else { if (PHP_SAPI == 'cli' && isset($_SERVER['_'])) { self::$phpBinary = $_SERVER['_']; if (strpos(self::$phpBinary, 'phpunit') !== FALSE) { $file = file(self::$phpBinary); $tmp = explode(' ', $file[0]); self::$phpBinary = trim($tmp[1]); } } } if (!is_readable(self::$phpBinary)) { self::$phpBinary = 'php'; } else { self::$phpBinary = escapeshellarg(self::$phpBinary); } } $command = self::$phpBinary . ' -l ' . escapeshellarg($filename); if (DIRECTORY_SEPARATOR == '\\') { $command = '"' . $command . '"'; } $output = shell_exec($command); if (strpos($output, 'Errors parsing') !== FALSE) { throw new RuntimeException($output); } }