【发布时间】:2011-04-22 19:33:06
【问题描述】:
如何从 PHP 中获取php 的二进制路径?
我在phpinfo() 中看到了它,但我需要另一种在 Linux 和 Windows 系统中获取它的方法。
【问题讨论】:
如何从 PHP 中获取php 的二进制路径?
我在phpinfo() 中看到了它,但我需要另一种在 Linux 和 Windows 系统中获取它的方法。
【问题讨论】:
对于 Windows 和 XAMPP:
$php = getenv('PHPRC') . '/php.exe';
if(is_file($expected)){
return $php;
}
【讨论】:
很简单!
var_dump(getenv('PHPBIN'));
但它只适用于 Windows,所以我们应该使用this answer。
我是怎么得到这个的?我刚刚输入了 echo echo phpinfo(); 并在那里搜索了 php 路径。看看这里:
然后我在这里得到它:php getenv 和......你看到了结果。
【讨论】:
在 Windows 中,使用 WAMP,您可以使用 ini 变量 - extension_dir - 因为它位于 PHP 文件夹中。
像这样:
echo str_replace('ext/', 'php.exe', ini_get('extension_dir'));
【讨论】:
通常,在 Windows 下简单的默认 PHP 安装中,php.ini 文件位于 PHP 二进制文件的同一目录并加载。
为简化起见,Windows 用户:
echo dirname(php_ini_loaded_file()).DIRECTORY_SEPARATOR.'php.exe';
瞧!
当然,如果您使用多个 .ini 文件,如果这些文件不在同一个 PHP 二进制目录中,则可能无法正常工作。顺便说一句,这可以解决大多数情况。从本地开发环境运行 PHP 的 Windows 开发人员。
【讨论】:
也许最好的解决方案是在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;
【讨论】:
使用“which”命令查找php。
$phpPath = exec("which php");
请注意,这并不能保证您的 Web 服务器可能正在使用相同的 php 可执行文件,而是保证在查看路径时找到的第一个实例。
【讨论】:
exec。
一种使用环境变量的方法,假设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
}
【讨论】:
你可以使用:
$_SERVER['_']
另外,the predefined constant PHP_BINDIR 给出了 PHP 可执行文件所在的目录。
出于安全原因,$_SERVER 值似乎没有公开。
【讨论】:
从 PHP 5.4 开始,您可以简单地使用 PHP_BINARY 保留常量。
【讨论】: