如何从PHP获取PHP二进制文件的路径?

如何从PHP获取PHP二进制文件的路径?,php,path,bin,Php,Path,Bin,如何从php获取php的二进制路径 我在中看到了它,但我需要另一种在Linux和Windows系统中获得它的方法。您可以使用: $_SERVER['_'] 另外,给出了PHP可执行文件所在的目录 在和上取样 出于安全原因,$\u服务器值似乎没有公开。一种使用环境变量的方法,假设php可执行文件位于系统路径中 function getPHPExecutableFromPath() { $paths = explode(PATH_SEPARATOR, getenv('PATH')); fo

如何从php获取
php
的二进制路径

我在中看到了它,但我需要另一种在Linux和Windows系统中获得它的方法。

您可以使用:

$_SERVER['_']
另外,给出了PHP可执行文件所在的目录

在和上取样


出于安全原因,
$\u服务器
值似乎没有公开。

一种使用环境变量的方法,假设
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
}
仅限Linux 使用“which”命令查找
php

$phpPath = exec("which php");

注意:这并不保证web服务器可能使用的是相同的
php
可执行文件,而是保证在查看路径时找到的第一个实例。

最好的解决方案可能是在流程组件中:

和。使用中:


通常,在Windows下的简单默认PHP安装中,PHP.ini文件位于PHP二进制文件的同一目录中并从该目录加载

为了简化,Windows用户:

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

当然,如果您使用的是多个.ini文件,那么如果这些文件不在同一个PHP二进制目录中,则可能无法工作。顺便说一句,这可能解决大多数情况。Windows开发人员从本地开发环境运行PHP。

在Windows中,使用,您可以使用ini变量-extension\u dir-将其放置在PHP文件夹中

像这样:

echo str_replace('ext/', 'php.exe', ini_get('extension_dir'));
这很容易

var_dump(getenv('PHPBIN'));
但是它只在Windows上工作,所以我们应该使用

我是怎么得到这个的?我刚刚输入了echo
echo phpinfo()
并在那里搜索
php
路径。请看这里:

然后我就到这里来了:而且。。。您可以看到结果。

对于Windows和:


从PHP 5.4开始,您可以简单地使用保留常量。

在Windows中,PHP_BINDIR常量似乎指向“C:\php5”,即使PHP位于完全不同的目录中,比如我的“C:\dev\PHP”。这里,PHP被设置为apache模块。我所在的服务器不幸返回空值,我认为是出于安全原因。PHP_BINDIR在Debian上为我工作$_服务器[''']没有。PHP\u BINDIR是在编译时设置的,这意味着它在大多数情况下是错误的。PHP_二进制是在运行时设置的。因此,请改用这个.PHP_二进制文件(自PHPV5.4;请参阅)可能重复的@ggirtsou,我无法获得您的编辑。。。为什么Windows路径包含一个带有“php.exe”的条目?如果是XAMPP特有的内容,请至少在代码中添加一条有意义的注释。@ggirtsou然后在代码中添加一条有意义的注释,因为这肯定不是标准行为那些文件_exists()是冗余的好观点,但大多数托管服务根本不允许
exec
。是的,有些主机不允许,有些主机不允许,我想这取决于您的上下文。这不一定会产生正确的php二进制文件,因为Apache和命令行可能使用不同的文件。对不起,忘了说我使用的是macAre(直接)连接的最后两句话?回答得很好!这值得投票表决
var_dump(getenv('PHPBIN'));
$php = getenv('PHPRC') . '/php.exe';

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