如何从PHP获取PHP BIN的路径?

Wil*_*iam 18 php path bin

如何从PHP获取php的bin路径?我在phpinfo()中看到过它; 但我需要另一种方法在Linux和Windows系统中获取它.

cod*_*ict 20

您可以使用:

$_SERVER['_']
Run Code Online (Sandbox Code Playgroud)

此外,预定义常量PHP_BINDIR给出了找到php可执行文件的目录.

样品在键盘ideone.

看起来,出于安全原因,$_SERVER值不会暴露.(我猜.如果我错了,请纠正我).

  • 在Windows中,PHP_BINDIR常量似乎指向"C:\ php5",即使php在一个完全不同的目录中,就像对我来说"C:\ dev\php".在这里,PHP被设置为apache模块. (11认同)
  • PHP_BINDIR 在编译时设置,这意味着在大多数情况下它是错误的。PHP_BINARY 在运行时设置。所以用这个代替。 (3认同)
  • PHP_BINDIR在Debian上为我工作.$ _SERVER ['_']没有. (2认同)

Sea*_*ney 15

Linux Only使用"which"命令查找php.

$phpPath = exec("which php");
Run Code Online (Sandbox Code Playgroud)

请注意,这并不保证您的Web服务器可能使用的php可执行文件,而是查看路径时找到的第一个实例.

  • 这并不一定会产生正确的php二进制文件,因为Apache和命令行可能会使用不同的. (3认同)

Sir*_*ius 10

假设php可执行文件位于系统路径中,使用环境变量的方法.

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
}
Run Code Online (Sandbox Code Playgroud)


Kri*_*czi 7

也许最好的解决方案是在Symfony流程组件中:https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Process/PhpExecutableFinder.phphttps://github.com/symfony/symfony /blob/master/src/Symfony/Component/Process/ExecutableFinder.php.正在使用:

<?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;
Run Code Online (Sandbox Code Playgroud)