Как я могу получить путь к двоичному файлу PHP из PHP?

Как я могу получить двоичный путь php из PHP?

Я видел это в phpinfo(), но мне нужен другой метод, который получает его в системах Linux и Windows.


person Wiliam    schedule 08.10.2010    source источник
comment
возможный дубликат Получить текущий исполняемый файл PHP из скрипта?   -  person Gordon    schedule 08.10.2010


Ответы (9)


Ты можешь использовать:

$_SERVER['_']

Кроме того, предопределенная константа PHP_BINDIR дает каталог, в котором находится исполняемый файл PHP.

Пример на CodePad и Ideone.

Похоже, из соображений безопасности значения $_SERVER не раскрываются.

person codaddict    schedule 08.10.2010
comment
В Windows константа PHP_BINDIR, похоже, указывает на C:\php5, даже если php находится в совершенно другом каталоге, как у меня C:\dev\php. Здесь PHP настроен как модуль Apache. - person SirDarius; 08.10.2010
comment
Сервер, на котором я был, к сожалению, вернул NULL, я полагаю, из соображений безопасности. - person Chris; 07.11.2013
comment
PHP_BINDIR работал у меня на Debian. $_SERVER['_'] нет. - person Jo Smo; 26.10.2016
comment
это не работает. используйте это - stackoverflow.com/a/43015868/2574125 - person aftamat4ik; 25.03.2017
comment
PHP_BINDIR устанавливается во время компиляции, что означает, что в большинстве случаев это неправильно. PHP_BINARY устанавливается во время выполнения. Так что используйте это вместо этого. - person Markus Müller; 18.03.2020
comment
PHP_BINARY (начиная с php v5.4; см. stackoverflow.com/a/9182368/3102305) - person Martin Rüegg; 16.12.2020

Только Linux

Используйте команду which, чтобы найти php.

$phpPath = exec("which php");

Обратите внимание, что это не гарантирует тот же исполняемый файл php, который может использовать ваш веб-сервер, а скорее первый экземпляр, который был найден при просмотре путей.

person SeanDowney    schedule 02.05.2011
comment
Хороший вопрос, но большинство хостингов вообще не разрешают exec. - person Hossein; 16.03.2013
comment
Да, некоторые хосты этого не делают, другие делают, я думаю, это зависит от вашего контекста. - person SeanDowney; 18.03.2013
comment
Это не обязательно приводит к правильному двоичному файлу php, поскольку Apache и командная строка вполне могут использовать разные. - person Lars Ebert; 15.06.2016

Метод, использующий переменные среды, при условии, что исполняемый файл php находится в системном пути.

function getPHPExecutableFromPath() {
  $paths = explode(PATH_SEPARATOR, getenv('PATH'));
  foreach ($paths as $path) {
    // We need this for XAMPP (Windows)
    if (strstr($path, 'php.exe') && isset($_SERVER["WINDIR"]) && file_exists($path) && is_file($path)) {
        return $path;
    }
    else {
        $php_executable = $path . DIRECTORY_SEPARATOR . "php" . (isset($_SERVER["WINDIR"]) ? ".exe" : "");
        if (file_exists($php_executable) && is_file($php_executable)) {
           return $php_executable;
        }
    }
  }
  return FALSE; // Not found
}
person SirDarius    schedule 08.10.2010
comment
@ggirtsou Я не понимаю вашего редактирования ... почему путь Windows должен содержать запись с php.exe? Если это что-то конкретное для XAMPP, пожалуйста, добавьте хотя бы осмысленный комментарий в код. - person SirDarius; 07.10.2012
comment
Затем @ggirtsou добавьте осмысленный комментарий в код, потому что это определенно не стандартное поведение. - person SirDarius; 08.10.2012
comment
Эти file_exists() избыточны - person ymakux; 16.02.2018

Возможно, лучшее решение находится в компоненте процесса Symfony:

PhpExecutableFinder.php и ExecutableFinder. php. В использовании:

<?php
    use Symfony\Component\Process\PhpExecutableFinder;

    $phpFinder = new PhpExecutableFinder;
    if (!$phpPath = $phpFinder->find()) {
        throw new \Exception('The php executable could not be found, add it to your PATH environment variable and try again');
    }

    return $phpPath;
person Krisztián Ferenczi    schedule 17.06.2014
comment
Отличный ответ! Это заслуживает голосования - person sykez; 02.02.2021

В Windows, используя WAMP, вы можете использовать ini< /em> переменная — extension_dir — так как она находится в папке PHP.

Нравится:

echo str_replace('ext/', 'php.exe', ini_get('extension_dir'));
person John    schedule 29.06.2016

Обычно при простой установке PHP по умолчанию в Windows файл php.ini находится и загружается из того же каталога, что и двоичный файл PHP.

Для упрощения пользователи Windows:

echo dirname(php_ini_loaded_file()).DIRECTORY_SEPARATOR.'php.exe';

Вуаля!

Конечно, если вы используете несколько файлов .ini, это может не сработать, если файлы не находятся в одном и том же двоичном каталоге PHP. Кстати, это может решить большинство случаев. Разработчики Windows, запускающие PHP из локальной среды разработки.

person Daniel Omine    schedule 15.03.2016
comment
извините, забыл сказать, что я использую Mac - person Evgeny Fedorenko; 13.05.2016
comment
Связаны ли последние два предложения (напрямую)? - person Peter Mortensen; 16.12.2020

Начиная с PHP 5.4 вы можете просто использовать PHP_BINARY зарезервированная константа.

person Joe    schedule 05.01.2020

Это очень легко!

var_dump(getenv('PHPBIN'));

Но это работает только в Windows, поэтому мы должны использовать этот ответ.

Как я это понял? Я просто набрал echo echo phpinfo(); и искал там путь php. Просто посмотрите здесь:

Как я нашел путь к PHP

Тогда я просто получаю это здесь: php getenv и... вы видите результат.

person aftamat4ik    schedule 25.03.2017

Для Windows и XAMPP:

$php = getenv('PHPRC') . '/php.exe';

if(is_file($expected)){
   return $php;
}
person ymakux    schedule 16.02.2018