2009-08-13 5 views
7

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

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

UPDATE

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

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

  • $_SERVER['_'] выглядит то, что я хочу из командной строки, но его на самом деле из переменной окружения, установленной оболочкой последней выполненной программа. При запуске с веб-сервера это двоичный файл веб-сервера.
  • which php не будет работать, потому что двоичный файл PHP не гарантированно будет таким же, как в PATH веб-сервера.

Заранее спасибо.

ответ

14

Константа PHP_BINDIR дает каталог, где PHP двоичный

+1

Ближе всего я слышал, спасибо. – Schwern

+0

Но некоторые люди прогоняют меня, вероятно, потому, что они не проверяют его :) Рад помочь. – Lepidosteus

+1

Я использую это в своей консоли iphp. Был для меня надежным. – apinstein

2

Да, $_SERVER['_'] Это то, о чем вы говорите, или как близко, как существует. Причина, по которой вы получаете двоичный файл веб-сервера при его запуске из Интернета, заключается в том, что /usr/bin/php не имеет никакого отношения к выполнению веб-сервера; то, что он работает, является отдельным SAPI. Нет ничего из веб-экземпляра PHP, чтобы указать на /usr/bin/php, потому что нет причин для этого.

+0

Нет причин ... кроме тех, которые указаны в моем вопросе. – Schwern

+0

@schwern: но если исполняемый файл является веб-сервером, а php просто используется в качестве библиотеки, почему есть причина указывать на двоичный файл php, если он не используется. Существует различие с тем, как веб-серверы используют perl, потому что в большинстве случаев интерфейс является CGI, а это значит, что выполняется исполняемый файл perl (есть исключения). Я бы сказал, что ваш лучший выбор - это строка конфигурации или использовать eval(), если это достаточно хорошо для ваших нужд. – Fredrik

+0

@Schwern: Если вы * удалили * '/ usr/bin/php', ваш веб-сервер продолжал бы обрабатывать файлы PHP просто отлично. Я не знаю, как рассказать вам, почему нет никакой * технической причины для связи между ними, более четко, чем это. – chaos

0

В зависимости от установленного вы не можете найти PHP исполняемый пути PHP. , если php работает как модуль для веб-сервера, такого как модуль apache, тогда нет двоичного кода, который вы можете вызвать. вы можете заглянуть в php_info(), в нем перечислены все. может также путь к php. внутри этого пути вы можете принять двоичный код php.

, но почему вы хотите назвать дополнительный процесс? вы можете выполнить другие php-файлы командой include или eval. нет причин порождать новый процесс.

+0

Возможно, я хочу создать сервер? – Schwern

+0

+1 просто потому, что я не вижу причины для этого -1 – Fredrik

-2

насчет: <?php exec("which php"); ?>

Но, это UNIX/Linux только: D

+1

Нет абсолютно никакой гарантии, что двоичный файл PHP, который запускал программу, такой же, как двоичный файл PHP в вашем пути. В моей ситуации это явно не так. – Schwern

1

PHP_BINDIR константа, вероятно, проще всего использовать; следующая лучшая вещь, которую я мог придумать в основном воссоздании, что BINDIR путь от установки extension_dir конфигурации:

$phpbin = preg_replace("@/lib(64)?/.*[email protected]", "/bin/php", ini_get("extension_dir")); 

Он имеет регулярное выражение в нем, так что это больше похоже на родном языке Perl, но в противном случае (!) не является особенно оптимальным.

1

В PHP5.4 вы можете использовать PHP_BINARY постоянен, он не будет работать через mod_php или аналогичные, но будет через CGI и т.д.

Для более ранних версий PHP readlink('/proc/self/exe');, вероятно, будет хорошо, опять не будет работайте через mod_php.

-1

Я искал исполняемый файл php7 на своем mac (OSX El Capitan), чтобы настроить и установить xdebug (необходимый для поиска правильной версии phpize для запуска). Ни одно из решений я нашел работал для меня, так что я только что закончился на поиски этого:

find/-name php -print 

Я знал (из phpinfo()), что я был запущен php7, так что я был в состоянии вывести правильный каталог из варианты, представленные поиском.

+0

Спасибо, но это не отвечает на вопрос. Программа не может интерпретировать список, как человек. Человек просто догадывается, что является правильным (источник многих часов разочарования). И это только ищет файлы с именем «php», при запуске фактического интерпретатора можно назвать что угодно. – Schwern

Смежные вопросы