在Linux $_SERVER["_"]
包含PHP解释器可执行文件(例如/usr/bin/php -r 'echo $_SERVER["_"];'
将打印/usr/bin/php
)的path。 在使用PHP 5.3的Windows XP上, $_SERVER["_"]
为NULL
。
这与PHP本身无关。 它是定义该环境变量的shell。 PHP只是把它拿起来
例如,看这里 :
shell设置了一些默认的shell变量; PS2就是其中之一。 在Korn shell中设置或使用的其他有用的shell变量有:
- _(下划线) – 当shell执行外部命令时,在新进程的环境中将其设置为执行命令的路径。 在交互式使用中,该参数也在父shell中设置为上一个命令的最后一个字。
- …
我认为你在Windows中的最佳镜头是编写一个内部函数。 例如
PHP_FUNCTION(get_php_path) { char path[MAX_PATH]; int result; if (zend_parse_parameters_none() == FAILURE) return; result = GetmoduleeFileNameA(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:\用户\装甲战船\文件\ PHP干线\的Debug_TS \ php.exe的
我假定您指的是在CLI模式下运行PHP。
我只是在Windows 7的CLI 5.3中测试了这个,而实际上似乎没有办法找到当前脚本正在运行的PHP可执行文件( $_SERVER["_"]
索引不可用;也没有任何其他包含可执行文件路径的变量)。
另外,PHP手册中的Windows命令行PHP页面上没有什么可说的。 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"];
不是很好,但我没有更好的主意….
虽然不完美,你可以试试这个:
$_SERVER['phprc'] . 'php.exe'
这会给你类似的东西
C:\ Program Files \ PHP \ php.exe
找不到php.exe的真正解决方案,但是您可以使用include_path
或extension_dir
然后转到应该存储php.exe的父目录。 举个例子:
echo str_replace('\ext', '', ini_get('extension_dir'));