2010-08-29 82 views
5

在Linux $_SERVER["_"]包含路徑PHP解釋器可執行文件(例如/usr/bin/php -r 'echo $_SERVER["_"];'將打印/usr/bin/php)。在使用PHP 5.3的Windows XP上$_SERVER["_"]NULL

回答

10

這與PHP本身無關。它是定義該環境變量的shell。 PHP只是把它撿起

例如,見here

外殼設置一些默認的shell變量; PS2就是其中之一。被設置或在Korn殼使用的其它有用的殼的變量是:

  • 下劃線(_) - 當一個外部命令是由shell執行時,它被設置在新的過程的環境,以執行的命令的路徑。在交互式使用中,此參數也在父shell中設置爲上一個命令的最後一個字。
  • ...

我覺得在Windows中的勁射被編寫的內部函數。例如。

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 
+2

很好的解釋,爲什麼它不在Windows中。 – 2010-08-29 17:17:40

+0

謝謝。我不知道它是殼的特徵。 – 2010-08-29 19:53:38

0

我假設你指的是在CLI模式下運行PHP。

我剛剛在Windows 7的CLI 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"]; 

不是真的很大,但我沒有更好的想法....

0

雖然不完美,你可以試試這個:

$_SERVER['phprc'] . 'php.exe'

這將讓你像

C:\ Program Files文件\ PHP \ php.exe的

+1

有趣的非常的選擇,但我不是在命令行模式下獲得這個變量(PHP 5.3在Windows 7上)你確定這不是由服務器軟件設置的環境變量嗎? – 2010-08-29 16:11:08

+0

奇怪的是,這是一種新的CLI模式安裝,我發現PHPRC變量是:/ – Jamescun 2010-08-29 16:16:38

+0

它似乎是一個環境變量:http://www.php.net/manual/en/configuration.php(在註釋中)與此注意,它仍然可以在一些安裝(不是在我的xampp精簡版,雖然) – 2010-08-29 16:21:56

1

不是一個真正的解決方案,以找到php.exe,但你可能使用include_pathextension_dir並轉到其父目錄中應存儲php.exe。舉個例子:

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

感謝您不解釋投票:) – 2ndkauboy 2010-08-29 17:52:15

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\" 

    ... 

}