$ _SERVER ['_'] эквивалент в Windows - PullRequest
5 голосов
/ 29 августа 2010

В Linux $_SERVER["_"] содержит путь к исполняемому файлу интерпретатора PHP (например, /usr/bin/php -r 'echo $_SERVER["_"];' выведет /usr/bin/php). В Windows XP с PHP 5.3 $_SERVER["_"] это NULL.

Ответы [ 5 ]

10 голосов
/ 29 августа 2010

Это никак не связано с самим PHP. Это оболочка, которая определяет эту переменную среды. PHP просто забирает это

Например, см. здесь :

Оболочка устанавливает некоторые переменные оболочки по умолчанию; PS2 является одним из них. Другие полезные переменные оболочки, которые устанавливаются или используются в оболочке Korn:

  • _ (подчеркивание) - Когда оболочка выполняет внешнюю команду, она задается в среде нового процесса путем выполнения исполняемой команды. При интерактивном использовании этот параметр также устанавливается в родительской оболочке на последнее слово предыдущей команды.
  • ...

Я думаю, что ваш лучший шанс в 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);
}
* * Пример тысяча двадцать-один: * * 1 022
>php -r "echo get_php_path()";
D:\Users\Cataphract\Documents\php-trunk\Debug_TS\php.exe
1 голос
/ 29 августа 2010

Не настоящее решение для поиска php.exe, но вы можете использовать include_path или extension_dir и перейти в их родительский каталог, в котором следует хранить php.exe.Как пример:

echo str_replace('\ext', '', ini_get('extension_dir'));
0 голосов
/ 23 февраля 2018

Я бросил $_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\"

  ...

}
0 голосов
/ 29 августа 2010

Хотя и не идеально, вы можете попробовать это:

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

, что даст вам что-то вроде

C: \ Program Files \ PHP \ php.exe

0 голосов
/ 29 августа 2010

Я предполагаю, что вы имеете в виду запуск PHP в режиме CLI.

Я только что проверил это в CLI PHP 5.3 на Windows 7, и, похоже, на самом деле нет никакого способа узнать исполняемый файл PHP, под которым выполняется текущий скрипт (индекс $_SERVER["_"] недоступен; также нет ни одного другая переменная, которая содержит путь к исполняемому файлу).

Кроме того, страница Командная строка PHP в Windows в руководстве по PHP ничего не говорит по этой проблеме. 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"];

Не очень хорошо, но я понятия не имею ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...