Как определить путь к php.exe на windows - поиск путей по умолчанию?

В настоящее время я разрабатываю пару плагинов для Sublime Text 2 на OS X, и я хотел бы сделать их кросс-платформой, то есть мне нужно выяснить, установлено ли и где php.exe.

Прямо сейчас я вызываю /usr/bin/php в Python, который явно работает только на OS X и Linux:

phppath = '/usr/bin/php'<br>
pluginpath = sublime.packages_path() + '/HtmlTidy/tidy.php'<br>
retval = os.system( '%s "%s"' % ( phppath, scriptpath ) )

Но в Windows, по-видимому, нет определенного пути по умолчанию для php.exe. Чем больше я искал ее, тем больше возможностей. До сих пор, я думаю, мне пришлось бы проверять каждый из следующих путей существования:

c:\php\php.exe
c:\php5\php.exe
c:\windows\php.exe
c:\program files\php\php.exe
c:\wamp\bin\php\php5\php.exe
c:\xampp\php\php.exe

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

Итак, если у вас есть php.exe, установленный в некотором месте, отличном от этого, оставьте комментарий своим путем, и я добавлю его в список выше.

Кроме того, кажется, что php.exe и php-cli.exe. Я думаю, было бы нормально перебирать каждый возможный путь, сначала проверить php-cli.exe, а затем проверить php.exe и выполнить первое совпадение. Это правильно или есть лучшая практика?

Ответ 1

Если пользователь установил добавленную папку bin bin в систему PATH, вы должны просто попробовать и выполнить php -v, чтобы проверить, присутствует ли она.

Если вы хотите получить полный путь к исполняемому файлу php, а целевая система - Windows 2003 или более поздняя (например, Vista и 7), вы можете использовать команду WHERE, то есть:

C:\>where php.exe
C:\Program Files (x86)\WAMP\bin\php\php5.3.5\php.exe

Также см. возможный связанный с этим вопрос: Есть ли эквивалент 'which' в командной строке Windows?.

Если вы действительно отчаянно пытаетесь найти какой-либо файл на компьютере пользователя, вы можете попробовать выполнить равноценность find, но это будет slooow!

C: && cd \ && dir /s /b php.exe

Ответ 2

Из PHP 5.4 и более поздних версий вы можете использовать константу PHP_BINARY.

Ответ 3

попробовать

echo PHP_BINDIR;

Он работает, я тестировал его на MacOS, как в php 5.6