【问题标题】:How can I get the path of the PHP binary from PHP?如何从 PHP 获取 PHP 二进制文件的路径?
【发布时间】:2011-04-22 19:33:06
【问题描述】:

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

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

【问题讨论】:

标签: php path bin


【解决方案1】:

对于 Windows 和 XAMPP

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

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

【讨论】:

    【解决方案2】:

    很简单!

    var_dump(getenv('PHPBIN'));
    

    但它只适用于 Windows,所以我们应该使用this answer

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

    然后我在这里得到它:php getenv 和......你看到了结果。

    【讨论】:

      【解决方案3】:

      在 Windows 中,使用 WAMP,您可以使用 ini 变量 - extension_dir - 因为它位于 PHP 文件夹中。

      像这样:

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

      【讨论】:

        【解决方案4】:

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

        为简化起见,Windows 用户:

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

        瞧!

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

        【讨论】:

        • 抱歉忘了说我用的是mac
        • 最后两句是否(直接)相连?
        【解决方案5】:

        也许最好的解决方案是在Symfony 流程组件中:

        PhpExecutableFinder.phpExecutableFinder.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;
        

        【讨论】:

          【解决方案6】:

          仅限 Linux

          使用“which”命令查找php

          $phpPath = exec("which php");
          

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

          【讨论】:

          • 好点,但大多数托管服务根本不允许exec
          • 是的,有些主机没有,有些主机没有,我想这取决于你的上下文。
          • 这不一定会产生正确的 php 二进制文件,因为 Apache 和命令行很可能使用不同的二进制文件。
          【解决方案7】:

          一种使用环境变量的方法,假设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
          }
          

          【讨论】:

          • @ggirtsou 我没有得到您的编辑...为什么 Windows 路径会包含一个带有 "php.exe" 的条目?如果它是特定于 XAMPP 的,请至少在代码中添加有意义的注释。
          • @ggirtsou 然后在代码中添加有意义的注释,因为这肯定不是标准行为
          • 那些 file_exists() 是多余的
          【解决方案8】:

          你可以使用:

          $_SERVER['_']
          

          另外,the predefined constant PHP_BINDIR 给出了 PHP 可执行文件所在的目录。

          CodePadIdeone 上的示例。

          出于安全原因,$_SERVER 值似乎没有公开。

          【讨论】:

          • 在 Windows 中,PHP_BINDIR 常量似乎指向“C:\php5”,即使 php 位于完全不同的目录中,例如对我来说是“C:\dev\php”。在这里,PHP 被设置为 apache 模块。
          • 不幸的是,我所在的服务器返回 NULL,我认为是出于安全原因。
          • PHP_BINDIR 在 Debian 上为我工作。 $_SERVER['_'] 没有。
          • PHP_BINDIR 是在编译时设置的,这意味着在大多数情况下它是错误的。 PHP_BINARY 在运行时设置。所以改用这个。
          • PHP_BINARY(从 php v5.4 开始;参见 stackoverflow.com/a/9182368/3102305
          【解决方案9】:

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

          【讨论】:

            猜你喜欢
            • 2015-03-19
            • 2013-09-10
            • 1970-01-01
            • 2011-08-23
            • 2019-06-30
            • 1970-01-01
            • 2019-07-29
            • 2021-10-18
            • 1970-01-01
            相关资源
            最近更新 更多