如何从 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.php 和 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;
【讨论】:
【参考方案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 从 URL 字符串中获取文件路径/扩展名 [重复]