Get current PHP executable from within script?

前端 未结 10 1985
一个人的身影
一个人的身影 2020-12-03 21:08

I want to run a PHP cli program from within PHP cli. On some machines where this will run, both php4 and php5 are installed. If I run the outer program as

         


        
10条回答
  •  清歌不尽
    2020-12-03 21:17

    Unfortunately PHP_BINARY is returning the httpd binary (on windows XAMPP), so I'm back to using paths...

        if (defined('PHP_BINARY') && PHP_BINARY && in_array(PHP_SAPI, array('cli', 'cli-server')) && is_file(PHP_BINARY)) {
              return PHP_BINARY;
        } else if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
            $paths = explode(PATH_SEPARATOR, getenv('PATH'));
            foreach ($paths as $path) {
                if (substr($path, strlen($path)-1)==DIRECTORY_SEPARATOR) {
                    $path=substr($path, 0, strlen($path)-1);
                }
                if ( substr($path, strlen($path) - strlen('php')) == 'php' ) {
                    $response=$path.DIRECTORY_SEPARATOR.'php.exe';
                    if (is_file($response)) {
                        return $response;
                    }
                } else if ( substr($path, strlen($path) - strlen('php.exe')) == 'php.exe' ) {
                    if (is_file($response)) {
                        return $response;
                    }
                }                
            }
        } else {
            $paths = explode(PATH_SEPARATOR, getenv('PATH'));
            foreach ($paths as $path) {
                if (substr($path, strlen($path)-1)==DIRECTORY_SEPARATOR) {
                    $path=substr($path, strlen($path)-1);
                }
                if ( substr($path, strlen($path) - strlen('php')) == 'php' ) {
                    if (is_file($path)) {
                        return $path;
                    }
                    $response=$path.DIRECTORY_SEPARATOR.'php';
                    if (is_file($response)) {
                        return $response;
                    }
                }               
            }
        }
        return null;
    

提交回复
热议问题