在Linux上$_SERVER["_"]
包含PHP解释器可执行文件的路径(例如/usr/bin/php -r 'echo $_SERVER["_"];'
将打印/usr/bin/php
)。在带有PHP 5.3的Windows XP上,$_SERVER["_"]
为NULL
。
答案 0 :(得分:10)
这与PHP本身无关。它是定义该环境变量的shell。 PHP只是选择它
例如,请参阅here:
shell设置了一些默认的shell变量; PS2就是其中之一。在Korn shell中设置或使用的其他有用的shell变量是:
- _(下划线) - 当shell执行外部命令时,这将在新进程的环境中设置为执行命令的路径。在交互式使用中,此参数也在父shell中设置为上一个命令的最后一个单词。
- ...
我认为你在Windows中的最佳镜头是编写内部函数。 E.g。
PHP_FUNCTION(get_php_path)
{
char path[MAX_PATH];
int result;
if (zend_parse_parameters_none() == FAILURE)
return;
result = GetModuleFileNameA(NULL, path, MAX_PATH);
if (result == 0)
RETURN_FALSE;
if (result == MAX_PATH) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Path is too large");
RETURN_FALSE;
}
RETURN_STRINGL(path, result, 1);
}
示例:
>php -r "echo get_php_path()"; D:\Users\Cataphract\Documents\php-trunk\Debug_TS\php.exe
答案 1 :(得分:1)
查找php.exe不是一个真正的解决方案,但您可以使用include_path
或extension_dir
并转到应存储php.exe的父目录。举个例子:
echo str_replace('\ext', '', ini_get('extension_dir'));
答案 2 :(得分:0)
我假设你指的是在CLI模式下运行PHP。
我刚刚在Windows 7上的CLI PHP 5.3中对此进行了测试,实际上似乎没有办法找出当前脚本运行的PHP可执行文件($_SERVER["_"]
索引不可用;两者都不是还有包含可执行文件路径的其他变量。
此外,PHP手册中的Command Line PHP on Windows页面对此问题无话可说。 argv
和php_sapi_name()
也没有任何意义。
唯一想到的是在调用脚本之前设置环境变量的一个变通方法:
SET PHPEXE=C:\php\bin\php.exe
c:\php\bin\php.exe -f scriptname.php
然后在PHP脚本中:
$php_exe_path = $_SERVER["PHPEXE"];
不是很好,但我没有更好的主意......
答案 3 :(得分:0)
虽然不完美,但你可以试试这个:
$_SERVER['phprc'] . 'php.exe'
会给你类似的东西
C:\ Program Files \ PHP \ php.exe
答案 4 :(得分:0)
我抛弃了$_SERVER
,并为任何品味提供了很多选择:)
array(100) {
...
["PHPBIN"]=>
string(43) "d:\openserver\modules\php\PHP-7-x64\php.exe"
["PHPDIR"]=>
string(36) "d:\openserver\modules\php\PHP-7-x64\"
["PHPRC"]=>
string(35) "d:\openserver\modules\php\PHP-7-x64"
["PHP_BIN"]=>
string(43) "d:\openserver\modules\php\PHP-7-x64\php.exe"
["PHP_BINARY"]=>
string(43) "d:\openserver\modules\php\PHP-7-x64\php.exe"
["PHP_BINDIR"]=>
string(36) "d:\openserver\modules\php\PHP-7-x64\"
["PHP_DIR"]=>
string(36) "d:\openserver\modules\php\PHP-7-x64\"
...
}