2010-08-29 12 views
5

पर समकक्ष लिनक्स $_SERVER["_"] पर PHP दुभाषिया निष्पादन योग्य पथ (उदाहरण के लिए /usr/bin/php -r 'echo $_SERVER["_"];'/usr/bin/php प्रिंट करेगा) पर समतुल्य होगा। PHP 5.3 $_SERVER["_"] के साथ Windows XP पर NULL है।

उत्तर

10

PHP के साथ ऐसा करने के लिए कुछ भी नहीं है। यह खोल है जो उस पर्यावरण चर को परिभाषित करता है। पीएचपी बस इसे

उठाता है उदाहरण के लिए, here देखें:

खोल कुछ डिफ़ॉल्ट खोल चर होता है; पीएस 2 उनमें से एक है। अन्य उपयोगी खोल चर सेट या कॉर्न खोल में इस्तेमाल किया जाता है:

  • _ (अंडरस्कोर) - एक बाहरी कमांड खोल द्वारा निष्पादित किया जाता है, यह करने के लिए नई प्रक्रिया के वातावरण में सेट किया गया है निष्पादित आदेश का मार्ग। इंटरैक्टिव उपयोग में, यह पैरामीटर पैरेंट खोल में पिछले कमांड के अंतिम शब्द में भी सेट किया गया है।
  • ...

मुझे लगता है कि विंडोज में अपने सबसे अच्छे शॉट एक आंतरिक समारोह लिखने के लिए है। जैसे

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 में नहीं है explaing नहीं के लिए धन्यवाद। –

+0

धन्यवाद। मैं खोल के यह सुविधा नहीं जानता था। –

0

मुझे लगता है कि आप सीएलआई मोड में चल रहे PHP को संदर्भित करते हैं।

मैंने अभी विंडोज 7 पर सीएलआई PHP 5.3 में इसका परीक्षण किया है, और वास्तव में ऐसा लगता है कि मौजूदा स्क्रिप्ट के तहत चल रहे PHP निष्पादन योग्य को खोजने का कोई तरीका नहीं है ($_SERVER["_"] अनुक्रमणिका उपलब्ध नहीं है, न ही कोई अन्य है परिवर्तनीय जिसमें निष्पादन योग्य पथ शामिल है)।

इसके अलावा, PHP मैनुअल में Command Line PHP on Windows पृष्ठ पर इस मुद्दे पर कुछ भी कहना नहीं है। argv और php_sapi_name() कुछ भी प्रकट नहीं करते हैं, या तो। ,

$php_exe_path = $_SERVER["PHPEXE"]; 
नहीं

वास्तव में महान:

SET PHPEXE=C:\php\bin\php.exe 
c:\php\bin\php.exe -f scriptname.php 

और फिर PHP स्क्रिप्ट में:

केवल एक चीज है जो मन में आता स्क्रिप्ट कॉल करने से पहले एक वातावरण चर की स्थापना की एक kludgy समाधान नहीं है लेकिन मेरे पास कोई बेहतर विचार नहीं है ....

0

हालांकि सही नहीं है, तो आप इसे आजमा सकते हैं:

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

जो आप की तरह

सी कुछ देना होगा: \ Program Files \ पीएचपी \ php.exe

+1

दिलचस्प के लिए काफी विकल्प मिल गया है, लेकिन मैं CLI मोड में इस चर नहीं मिल रहा है (पीएचपी 5.3 विंडोज 7 पर) क्या आप वाकई इस सर्वर सॉफ्टवेयर या कुछ द्वारा निर्धारित एक वातावरण चर नहीं है? –

+0

अजीब, यह एक ताजा CLI मोड स्थापना है कि मैं में PHPRC चर पाया था:। Http://www.php.net/manual/en/configuration.php (नोट में:/ – Jamescun

+0

यह एक वातावरण चर हो रहा है) है कि चेतावनी के साथ, यह अभी भी कुछ इंस्टॉल में उपलब्ध (, हो सकता है हालांकि मेरे XAMPP लाइट पर नहीं) –

1

नहीं php.exe खोजने के लिए एक वास्तविक समाधान है, लेकिन आप हो सकता है include_path या extension_dir का उपयोग करें और अपनी मूल निर्देशिका पर जाएं जिसमें php.exe को संग्रहीत किया जाना चाहिए। एक उदाहरण के रूप में:

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

नीचे वोट :) – 2ndkauboy

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

    ... 

} 
संबंधित मुद्दे