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

Posted

技术标签:

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

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

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

【问题讨论】:

Get current PHP executable from within script?的可能重复 【参考方案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 可执行文件所在的目录。

CodePad 和 Ideone 上的示例。

出于安全原因,$_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 开始;参见 ***.com/a/9182368/3102305)【参考方案9】:

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

【讨论】:

以上是关于如何从 PHP 获取 PHP 二进制文件的路径?的主要内容,如果未能解决你的问题,请参考以下文章

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

使用 PHP 从 URL 字符串中获取文件路径/扩展名 [重复]

如何在 JavaScript ajax 调用中从 PHP passthru 获取二进制数据?

PHP:从绝对 URL 获取绝对路径

从目录和子目录 php 中获取所有文件、大小、路径

如何从 php 或 node.js 获取 websocket url 路径