在Windows上相当于$ _SERVER

在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页面上没有什么可说的。 argvphp_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_pathextension_dir然后转到应该存储php.exe的父目录。 举个例子:

 echo str_replace('\ext', '', ini_get('extension_dir'));