在Windows系统上如何确定php.exe的路径 - 搜索默认路径

31

我目前正在为OS X的Sublime Text 2开发几个插件,我希望使它们可以跨平台运行,这意味着我必须找出是否安装了php.exe以及其所在位置。

现在我在Python中调用/usr/bin/php,显然只适用于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,并取第一个匹配项。这是正确的吗?还是有更好的做法?

3
我会在Windows PATH中搜索,如果没有找到,就会提示用户进行查找。你的列表永远不可能完整。而且,如果用户有多个路径指向php.exe会怎么样呢?我现在有5或6个php.exe。 - Corbin
3
请查看 PHPRC 环境变量,其中包含 php.exe 文件所在的目录。它经常在Windows系统中可用。 - hakre
你可以尝试搜索注册表,但我并不是专家,不过我无法确定如何操作。 - aquavitae
6个回答

47
如果用户已将PHP的bin文件夹添加到系统的 PATH 中,那么您只需尝试执行 php -v 来检查它是否存在。
如果您想要获取PHP可执行文件的完整路径,而目标系统是 Windows Server 2003 或更高版本(如 Windows VistaWindows 7),则可以使用 WHERE 命令,即:
C:\> where php.exe
C:\Program Files (x86)\WAMP\bin\php\php5.3.5\php.exe

另请参阅可能相关的问题:在Windows命令行中是否有类似于'which'的等效命令?

如果您真的迫切需要在用户计算机上查找任何文件,您可以尝试执行相当于find的等效命令-但这将会非常缓慢

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

“where” 找不到我的 “php.exe”。它似乎只在 PATH 和当前目录中查找。 - Kos
@Kos,你能告诉我们,你的php.exe实际上在哪里吗? - Matt
谢谢JonnyReeves,where可能可以胜任这个工作,但是您在链接中发布的第一个答案引导我找到了这个Python脚本,它似乎很好地处理了PATH和PATHEXT:http://nedbatchelder.com/code/utilities/wh_py.html - 由于Sublime Text 2的插件是用Python编写的,我将使用其中的一些代码行来最小化调用外部程序。 - Matt
像之前提到的那样,@Mat是一个常规的WAMP安装,C:\wamp\bin\php\php5.3.9\php.exe - Kos
“where /?” 命令会默认在当前目录和 PATH 环境变量指定的路径中进行搜索。 - Kos
在Windows中,您可以使用以下命令检查路径是否包含PHP: $env:Path.Replace(';', "\n") | findstr "php"` - TechDogLover OR kiaNasirzadeh

9
在PowerShell或命令提示符中,运行php -r "echo PHP_VERSION;"可以输出PHP的版本号。
查看其他PHP常量,请访问https://www.php.net/manual/es/reserved.constants.php
要获取PHP可执行文件的完整路径,请运行php -r "echo PHP_BINARY;"
如果需要删除php.exe,则可以运行php -r "echo str_replace('php.exe', '', PHP_BINARY);"

6

从PHP 5.4及更高版本开始,您可以使用PHP_BINARY常量。


对于我们这些新手来说,如果能更新并提供更详细的解释会很有帮助。 - Bram Vanroy
echo PHP_BINARY; 但在 Linux 上没有任何输出。 - Sebastián Grignoli
在我的情况下,它返回的是 C:\xampp\apache\bin\httpd.exe,它不执行文件,而 C:\xampp\php\php.exe 则可以。 - ymakux

1

使用:

C:\xampp\php\php.exe

如果您的XAMPP实例在D:E:上,则应该可以正常工作。您需要从C:更改它。

0
我找到了一种方法,让你可以找到 php.exe 存储的位置。在 C: 盘中,点击搜索栏并搜索 "php.exe"。然后,会出现一个名为 php 的应用程序,请单击它。接着,命令提示符将打开,在 cmd 标签中,它将显示 php.exe 的结尾。那就是你的 php.exe 所在的位置,你可以将该文件的链接地址放入 VS Code 中。

-3

尝试

echo PHP_BINDIR;

它可行。我在macOS上测试过,用的是PHP 5.6。


1
问题是关于Windows而不是Mac。这不起作用。 - Ryall
好的,谢谢你分享你的经验。你尝试在什么系统配置上运行它?PHP版本等等... - Yevgeniy Afanasyev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接