在Linux $_SERVER["_"]
包含路徑PHP解釋器可執行文件(例如/usr/bin/php -r 'echo $_SERVER["_"];'
將打印/usr/bin/php
)。在使用PHP 5.3的Windows XP上$_SERVER["_"]
是NULL
。
回答
這與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
我假設你指的是在CLI模式下運行PHP。
我剛剛在Windows 7的CLI 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"];
不是真的很大,但我沒有更好的想法....
雖然不完美,你可以試試這個:
$_SERVER['phprc'] . 'php.exe'
這將讓你像
C:\ Program Files文件\ PHP \ php.exe的
有趣的非常的選擇,但我不是在命令行模式下獲得這個變量(PHP 5.3在Windows 7上)你確定這不是由服務器軟件設置的環境變量嗎? – 2010-08-29 16:11:08
奇怪的是,這是一種新的CLI模式安裝,我發現PHPRC變量是:/ – Jamescun 2010-08-29 16:16:38
它似乎是一個環境變量:http://www.php.net/manual/en/configuration.php(在註釋中)與此注意,它仍然可以在一些安裝(不是在我的xampp精簡版,雖然) – 2010-08-29 16:21:56
不是一個真正的解決方案,以找到php.exe,但你可能使用include_path
或extension_dir
並轉到其父目錄中應存儲php.exe。舉個例子:
echo str_replace('\ext', '', ini_get('extension_dir'));
感謝您不解釋投票:) – 2ndkauboy 2010-08-29 17:52:15
我甩$_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\"
...
}
- 1. REGEXP_SUBSTR相當於在SQL Server
- 2. DISTINCTROW相當於在SQL Server
- 3. 在Windows中相當於./configure?
- 4. 相當於在Windows的Unix
- 5. AF_UNIX相當於Windows
- 6. erand48 windows相當於
- 7. Windows相當於'nice'
- 8. 相當於SP的SQL Server
- 9. SQL Server相當於Javascript UnEscape
- 10. SQL Server MOD相當於
- 11. 相當於DBMS_METADATA.GET_DDL的SQL Server
- 12. Oracle相當於SQL Server DATEPART
- 13. Linux相當於windows的EnterCriticalSection
- 14. Windows vScrollBar相當於Mac OSX
- 15. PC/Windows相當於「假」
- 16. Windows命令相當於egrep
- 17. Linux相當於Windows掛鉤
- 18. kbhit相當於Windows CE
- 19. Windows相當於ulimit -n
- 20. 在Windows上的'主機名'相當於
- 21. Python:在Windows上相當於signal.pause()
- 22. 什麼是Windows Server 2012命令行相當於`aspnet_regiis -ir`?
- 23. INET_ATON的SQL Server相當於什麼
- 24. SQL Server中的Hashset相當於
- 25. 相當於sysobjects.uid的SQL Server 2008 sys.objects
- 26. 相當於SQL Server的MySQL計算列
- 27. Oracle中的SQL Server相當於
- 28. 相當於SQL Server CTE的NuoDB
- 29. Oracle相當於SQL Server/Sybase DateDiff
- 30. MS SQL Server相當於oracle查詢
很好的解釋,爲什麼它不在Windows中。 – 2010-08-29 17:17:40
謝謝。我不知道它是殼的特徵。 – 2010-08-29 19:53:38