Как получить путь к php BIN из PHP?

Как я могу получить путь bin php из PHP? Я видел это в phpinfo (); но мне нужен другой метод, который получает его в системах linux и windows.

8 ответов


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

$_SERVER['_']

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

образец Codepad и ideone.

похоже, по соображениям безопасности, $_SERVER значения не отображаются. (Я думаю. Пожалуйста, поправьте меня, если я ошибаюсь).


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

$phpPath = exec("which php");

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


метод, использующий переменные среды, предполагая, что исполняемый файл 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
}

возможно, лучшее решение находится в компоненте процесса Symfony: https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Process/PhpExecutableFinder.php и https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Process/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;

в windows, используя wamp, вы можете использовать переменную ini-extension_dir-как она размещена в папке php.

такой:

echo str_replace('ext/', 'php.exe', ini_get('extension_dir'));

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

чтобы упростить, пользователи Windows:

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

вуаля!

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


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

var_dump(getenv('PHPBIN'));

но он работает только в windows, поэтому мы должны использовать этот ansver -https://stackoverflow.com/a/3889630/2574125

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

тогда я просто получить здесь: php getenv и ... вы видите результат. Используйте его, ребята.


Windows, XAMPP

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

if(is_file($expected)){
   return $php;
}