2010-10-08 2 views
16

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

+0

возможно дубликат [Получить текущую PHP исполняемый внутри сценария?] (Http://stackoverflow.com/questions/2372624/get-current-php-executable-from-within -script) – Gordon

ответ

19

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

$_SERVER['_'] 

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

Образец на Codepad и ideone.

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

+10

В Windows константа PHP_BINDIR указывает на «C: \ php5», даже если php находится в совершенно другом каталоге, например, для меня «C: \ dev \ php». Здесь PHP устанавливается как модуль apache. – SirDarius

+0

Сервер, на котором я был, к сожалению, возвратил NULL, я предполагаю из-за соображений безопасности. – Chris

+1

PHP_BINDIR работал для меня на Debian. $ _SERVER ['_'] этого не делал. –

8

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

Это сработало для меня как на Windows, так и на Linux, спасибо! – SeanDowney

+0

@ggirtsou Я не получаю ваше редактирование ... почему Путь Windows содержит запись с «php.exe»? Если это что-то конкретное для XAMPP, пожалуйста, по крайней мере добавьте в код значащий комментарий. – SirDarius

+0

@SirDarius да редактирование основано на выходе XAMPP. –

14

Linux только Используйте команду "которая" найти PHP.

$phpPath = exec("which php"); 

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

+0

Хорошая точка, но большинство услуг хостинга не позволяют ' exec'. – Hossein

+0

Да, некоторые хосты не делают, другие делают, я думаю, это зависит от вашего контекста. – SeanDowney

+1

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

4

Возможно, наилучшим решением является компонент процесса 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; 
1

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

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

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

вуаля!

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

+0

Извините, забыл сказать, что использую mac –

4

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

так:

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

Это очень просто!

var_dump(getenv('PHPBIN')); 

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

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

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

+0

Возвращает неверный результат на XAMMP – ymakux

0

Окна, XAMPP

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

if(is_file($expected)){ 
    return $php; 
} 
Смежные вопросы