Trên Linux $_SERVER["_"]
chứa đường dẫn đến trình thông dịch PHP thực thi (ví dụ: /usr/bin/php -r 'echo $_SERVER["_"];'
sẽ in /usr/bin/php
). Trên Windows XP với PHP 5.3 $_SERVER["_"]
là NULL
.
Trả lời
Không có gì để làm với chính PHP. Đó là shell xác định biến môi trường đó. PHP chỉ nhặt nó lên
Ví dụ, xem here:
Vỏ thiết lập một số biến shell mặc định; PS2 là một trong số họ. biến vỏ hữu ích khác được thiết lập hoặc sử dụng trong Korn shell là:
- _ (gạch dưới) - Khi một lệnh bên ngoài được thực hiện bởi các vỏ, điều này được đặt trong môi trường của quá trình mới để đường dẫn của lệnh được thực hiện. Trong sử dụng tương tác, tham số này cũng được đặt trong trình bao chính thành từ cuối cùng của lệnh trước đó.
- ...
Tôi nghĩ rằng bức ảnh đẹp nhất của bạn trong Windows là viết một chức năng nội bộ. Ví dụ.
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);
}
Ví dụ:
>php -r "echo get_php_path()"; D:\Users\Cataphract\Documents\php-trunk\Debug_TS\php.exe
Tôi giả sử bạn tham khảo chạy PHP trong chế độ CLI.
Tôi vừa thử nghiệm điều này trong CLI PHP 5.3 trên Windows 7, và có vẻ như không có cách nào để tìm ra tệp PHP tập lệnh hiện tại đang chạy theo (chỉ mục $_SERVER["_"]
không có sẵn; biến chứa đường dẫn của tệp thi hành).
Ngoài ra, trang Command Line PHP on Windows trong hướng dẫn sử dụng PHP không có gì để nói về vấn đề này. argv
và php_sapi_name()
cũng không reveail bất cứ điều gì.
Điều duy nhất mà đến với tâm là một workaround kludgy của thiết lập một biến môi trường trước khi gọi các kịch bản:
SET PHPEXE=C:\php\bin\php.exe
c:\php\bin\php.exe -f scriptname.php
và sau đó trong kịch bản PHP:
$php_exe_path = $_SERVER["PHPEXE"];
Không thực sự tuyệt vời, nhưng tôi không có ý tưởng tốt hơn ....
Trong khi không hoàn hảo, bạn có thể thử điều này:
$_SERVER['phprc'] . 'php.exe'
mà sẽ cung cấp cho bạn một cái gì đó giống như
C: \ Program Files \ PHP \ php.exe
Thú vị, nhưng tôi không nhận được biến này trong chế độ CLI (PHP 5.3 trên Windows 7) Bạn có chắc đây không phải là một biến môi trường được thiết lập bởi phần mềm máy chủ hay cái gì đó? –
Rất tiếc, đó là cài đặt chế độ CLI mới mà tôi đã tìm thấy biến PHPRC.:/ – Jamescun
nó có vẻ là biến môi trường: http://www.php.net/manual/en/configuration.php (trong ghi chú) với báo trước đó, nó vẫn có thể có sẵn trong một số cài đặt (không phải trên lite xampp của tôi), –
Không phải là một giải pháp thực tế để tìm ra php.exe, nhưng bạn có thể sử dụng include_path
hoặc extension_dir
và chuyển đến thư mục cha mẹ của chúng, trong đó lưu trữ php.exe. Ví dụ:
echo str_replace('\ext', '', ini_get('extension_dir'));
Cảm ơn bạn đã không bỏ phiếu xuống :) – 2ndkauboy
tôi đổ $_SERVER
và có tùy chọn khá nhiều cho bất kỳ hương vị :)
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. JSP hoặc JavaScript tương đương với $ _SERVER ["HTTP_HOST" của PHP?
- 2. AF_UNIX tương đương với Windows
- 3. Tương đương gettimeday() cho Windows
- 4. windows tương đương với inet_aton
- 5. Có tương đương với Thực hiện trên Windows không?
- 6. Có tương đương với Valgrind cho .Net trên Windows không?
- 7. Windows <sys/file.h> tương đương
- 8. của Windows Beep() tương đương cho Linux
- 9. Windows tương đương với UNIX pwd
- 10. WPF tương đương với Application.AddMessageFilter (Windows Forms)
- 11. D-Bus tương đương với Windows
- 12. Windows tương đương với OS X Keychain?
- 13. Lệnh Windows tương đương với egrep
- 14. Tương đương với Unix eval trong Windows
- 15. Tương đương với Windows/dev/random
- 16. tham gia tương đương trong Windows
- 17. tương đương với $ _SERVER ['DOCUMENT_ROOT'] sẽ hoạt động khi tập lệnh được cron gọi?
- 18. Tương đương với Linux trên IIS
- 19. ldd tương đương trên android
- 20. python tương đương tương đương
- 21. Có tương đương Windows với fdopen cho HANDLE không?
- 22. C tương đương với linux của windows QueryPerformanceCounter
- 23. Tương đương với Linux mkdir -p trong Windows là gì?
- 24. Tương đương với Windows getch() cho Mac/Linux treo
- 25. Ứng dụng Windows 8 Store có tương đương MessageBox không?
- 26. Tương đương/dev/shm trong Windows System là gì?
- 27. Tương đương với pop trên dây
- 28. PHP: $ _SERVER biến: $ _SERVER [ 'HTTP_HOST'] vs $ _SERVER [ 'SERVER_NAME']
- 29. Thực hiện tương đương với "Kill Process Tree" trong C++ trên windows
- 30. unix "java" lệnh tương đương trên cửa sổ?
Giải thích lý do tại sao nó không có trong Windows. –
Cảm ơn bạn. Tôi không biết đó là tính năng của trình bao. –