Как узнать исполняемый исполняемый файл PHP?

Изнутри PHP-программы я хочу знать местоположение исполняемого файла. Для этой цели Perl имеет $^X Есть ли эквивалент в PHP?

Это значит, что он может выполнять дочерний PHP-процесс, используя сам (а не жесткий код, путь или предполагать, что «php» правильный).

ОБНОВИТЬ

  1. Я использую lighttpd + FastCGI, а не Apache + mod_php. Так что да, есть двоичный файл PHP.
  2. eval / include не является решением, потому что я создаю сервер, который должен жить дальше запроса.

Вещи, которые я пробовал и не работаю:

  • $_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