Изнутри PHP-программы я хочу знать местоположение исполняемого файла. Для этой цели Perl имеет $^X
Есть ли эквивалент в PHP?
Это значит, что он может выполнять дочерний PHP-процесс, используя сам (а не жесткий код, путь или предполагать, что «php» правильный).
ОБНОВИТЬ
Вещи, которые я пробовал и не работаю:
$_SERVER['_']
выглядит так, как я хочу, из командной строки, но на самом деле из переменной среды, установленной оболочкой последней исполняемой программы. При запуске с веб-сервера это двоичный файл веб-сервера. which php
не будет работать, поскольку двоичный файл PHP не гарантированно будет таким же, как в PATH
веб-сервера. Заранее спасибо.
Константа PHP_BINDIR дает вам каталог, в котором двоичный файл php
Да, $_SERVER['_']
– это то, о чем вы говорите, или так близко, как есть. Причина, по которой вы получаете двоичный код веб-сервера при его запуске из Интернета, заключается в том, что /usr/bin/php
имеет никакого отношения к выполнению веб-сервера; то, что он работает, является отдельным SAPI. Нет ничего из веб-экземпляра PHP, чтобы указать на /usr/bin/php
потому что нет причин для этого.
Константа PHP_BINDIR
вероятно, самая простая вещь для использования; следующая лучшая вещь, которую я мог бы придумать, – это в основном повторное создание этого пути bindir из настройки конфигурации extension_dir
:
$phpbin = preg_replace("@/lib(64)?/.*$@", "/bin/php", ini_get("extension_dir"));
В нем есть регулярное выражение, поэтому оно больше похоже на ваш собственный perl (!), Но в остальном это не особенно оптимально.
В PHP5.4 вы можете использовать константу PHP_BINARY, она не будет работать через mod_php или аналогичную, но через CGI и т. Д.
Для более ранних версий PHP readlink('/proc/self/exe');
вероятно, будет хорошо, опять же это не сработает через mod_php.
В зависимости от того, как установлен php, вы CANT найдете исполняемый файл php. если php работает как модуль для веб-сервера, такого как модуль apache, тогда нет двоичного кода, который вы можете вызвать. вы можете заглянуть в php_info (), в котором перечислены все. также может быть путь к php. внутри этого пути вы можете принять двоичный код php.
но почему вы хотите назвать дополнительный процесс? вы можете выполнять другие php-файлы командой include или eval. нет причин порождать новый процесс.
Я искал исполняемый файл php7 на своем mac (OSX El Capitan), чтобы настроить и установить xdebug (необходимый для поиска правильной версии phpize для запуска). Ни одно из решений, которые я нашел, не сработало для меня, поэтому я просто закончил поиск:
find / -name php -print
Я знал (из phpinfo ()), что я запускал php7, поэтому я смог вывести правильный каталог из опций, представленных find.
как насчет: <?php exec("which php"); ?>
<?php exec("which php"); ?>
Но это только unix / linux: D