2010-08-29 38 views
5

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["_"]NULL.

Trả lời

10

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

Giải thích lý do tại sao nó không có trong Windows. –

+0

Cảm ơn bạn. Tôi không biết đó là tính năng của trình bao. –

0

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. argvphp_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 ....

0

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

+1

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ì đó? –

+0

Rất tiếc, đó là cài đặt chế độ CLI mới mà tôi đã tìm thấy biến PHPRC.:/ – Jamescun

+0

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), –

1

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')); 
+1

Cảm ơn bạn đã không bỏ phiếu xuống :) – 2ndkauboy

0

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

    ... 

} 
Các vấn đề liên quan