Получить текущий исполняемый файл PHP из сценария?

Я хочу выполнить PHP cli программа из PHP cli. На некоторых машинах, куда это будет работать, и установлены php4 и php5. Если я запускаю внешнюю программу как

php5 outer.php

Я хочу, чтобы внутренний сценарий был выполнен с той же php версией. В Perl я использовал бы $^X получить исполняемый файл жемчуга. Кажется, что в PHP нет такой переменной?

Прямо сейчас я использую $_SERVER['_'], потому что удар (и zsh) установил переменную среды $_ к последней управляемой программе. Но, я не полагался бы на определенную для оболочки идиому.

ОБНОВЛЕНИЕ: различиями в Версии является всего лишь одна проблема. Если PHP не находится в ПУТИ, например, или не является первой версией, найденной в ПУТИ, предложения, чтобы найти, что информация о версии не поможет.

Кроме того, csh и варианты, кажется, не устанавливают $_ переменная среды для их процессов, таким образом, обходное решение не применимо там.

ОБНОВЛЕНИЕ 2: Я использовал $_SERVER['_'], пока я не обнаружил, что это не делает правильной вещи под xargs (который имеет смысл... zsh наборы это к команде, которую это выполнило, который является xargs, нет php5, и xargs не заменяет переменную). Отступание к использованию:

$version = explode('.', phpversion());
$phpcli = "php{$version[0]}";
20
задан benizi 19 March 2010 в 20:27
поделиться

4 ответа

Так, это уродливо, но работает на Linux:

<?php
    // Returns the full path of the current PHP executable
    function get_proc_name(){
       // Gets the PID of the current executable
       $pid = posix_getpid();

       // Returns the exact path to the PHP executable.
       $exe = exec("readlink -f /proc/$pid/exe");
       return $exe;
    }

Я попробую поработать над версией для Windows позже.

EDIT

Не похоже, что есть простой способ сделать это для Windows. Некоторые исполняемые файлы Windows, такие как tasklist, могут дать вам имя исполняемого файла, но не полный путь к нему. Мне удалось найти примеры поиска полного пути по PID только для C++, AutoHotkey и тому подобных программ. Если у кого-то есть предложения, где еще я могу поискать, дайте мне знать.

PS: Чтобы получить PID в PHP для Windows, очевидно, нужно вызвать getmypid().

3
ответ дан 29 November 2019 в 23:40
поделиться

Вы можете попробовать проанализировать результат phpinfo ().

-2
ответ дан 29 November 2019 в 23:40
поделиться

Есть ли что-нибудь полезное в $_ENV?

Переменная окружения SHELL в Unix содержит путь к оболочке, которая запущена в данный момент. Если вы добавите #!/path/to/php в начало вашего файла PHP, сделаете его исполняемым и запустите файл напрямую, будет ли $_ENV['SHELL'] содержать /path/to/php?

1
ответ дан 29 November 2019 в 23:40
поделиться

Вы можете использовать phpversion () , чтобы получить текущую версию PHP перед выполнением «внутреннего» скрипта.

http://php.net/manual/en/function.phpversion.php

2
ответ дан 29 November 2019 в 23:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: