Я хочу выполнить 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]}";
Так, это уродливо, но работает на 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().
Вы можете попробовать проанализировать результат phpinfo ().
Есть ли что-нибудь полезное в $_ENV
?
Переменная окружения SHELL в Unix содержит путь к оболочке, которая запущена в данный момент. Если вы добавите #!/path/to/php
в начало вашего файла PHP, сделаете его исполняемым и запустите файл напрямую, будет ли $_ENV['SHELL']
содержать /path/to/php
?
Вы можете использовать phpversion ()
, чтобы получить текущую версию PHP перед выполнением «внутреннего» скрипта.