开发者

How can I get the path of the PHP binary from PHP?

How can I get the binary path of php from PHP?

I saw it in phpinfo(), but I need another method th开发者_如何学运维at gets it in Linux and Windows systems.


You can use:

$_SERVER['_']

Also, the predefined constant PHP_BINDIR gives the directory where the PHP executable is found.

Sample on CodePad and Ideone.

It looks like, for security reasons, $_SERVER values are not exposed.


Linux Only

Use the "which" command to find php.

$phpPath = exec("which php");

Note this does not guarantee the same php executable that your web server may be using, but rather the first instance that was found while looking through the paths.


A method using environment variables, assuming the php executable is in the system path.

function getPHPExecutableFromPath() {
  $paths = explode(PATH_SEPARATOR, getenv('PATH'));
  foreach ($paths as $path) {
    // We need this for XAMPP (Windows)
    if (strstr($path, 'php.exe') && isset($_SERVER["WINDIR"]) && file_exists($path) && is_file($path)) {
        return $path;
    }
    else {
        $php_executable = $path . DIRECTORY_SEPARATOR . "php" . (isset($_SERVER["WINDIR"]) ? ".exe" : "");
        if (file_exists($php_executable) && is_file($php_executable)) {
           return $php_executable;
        }
    }
  }
  return FALSE; // Not found
}


Maybe the best solution is in the Symfony process component:

PhpExecutableFinder.php and ExecutableFinder.php. In use:

<?php
    use Symfony\Component\Process\PhpExecutableFinder;

    $phpFinder = new PhpExecutableFinder;
    if (!$phpPath = $phpFinder->find()) {
        throw new \Exception('The php executable could not be found, add it to your PATH environment variable and try again');
    }

    return $phpPath;


In Windows, using WAMP, you can use the ini variable - extension_dir - as it is placed in the PHP folder.

Like this:

echo str_replace('ext/', 'php.exe', ini_get('extension_dir'));


Normally, in a simple default PHP installation under Windows, the php.ini file is located and loaded from the same directory of the PHP binary.

To simplify, Windows users:

echo dirname(php_ini_loaded_file()).DIRECTORY_SEPARATOR.'php.exe';

Voilà!

Of course, if you are using multiple .ini files, it may not work if the files are not into the same PHP binary directory. BTW, this may solve to most of cases. Windows developers running PHP from local development environment.


As of PHP 5.4 you can simply use the PHP_BINARY reserved constant.


It's very easy!

var_dump(getenv('PHPBIN'));

But it works only on Windows, so we should use this answer.

How did I get this? I just typed echo echo phpinfo(); and searched the php path there. Just see here:

How can I get the path of the PHP binary from PHP?

Then I just getting it here: php getenv and ... you see the result.


For Windows and XAMPP:

$php = getenv('PHPRC') . '/php.exe';

if(is_file($expected)){
   return $php;
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜