$ _SERVER ['_']等效于Windows

时间:2010-08-29 15:54:30

标签: php windows environment-variables

在Linux上$_SERVER["_"]包含PHP解释器可执行文件的路径(例如/usr/bin/php -r 'echo $_SERVER["_"];'将打印/usr/bin/php)。在带有PHP 5.3的Windows XP上,$_SERVER["_"]NULL

5 个答案:

答案 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_pathextension_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页面对此问题无话可说。 argvphp_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\"

  ...

}