PHP执行程序(“whichphp”)返回错误的结果


PHP exec("which php" ) returns wrong result

我的OS X Mavericks上的本地开发站点使用exec("which php")-命令。这个exec()-命令的结果是"/usr/bin.php",这实际上是错误的,它应该返回"opt/local/php5/bin.php"。"opt/local/php5/bin.php"是我的终端会话中命令"which php"的结果。我该怎么解决这个问题?

如果你问错了问题,就会得到错误的结果。)

which命令返回可执行文件的完整路径。which查找命令的位置是在$PATH环境变量中定义的,它看起来像这样:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/android-sdk/sdk/platform-tools:/opt/android-sdk/sdk/tools

这些是常用的命令路径,用冒号分隔。

显然,您的机器上安装了多个PHP。您得到的是主路径,可能是由您的数据包管理器安装的。

只有当您将/opt/local/php5/bin添加到Web服务器用户的环境中时,才能找到/opt中的一个,并且它必须在/usr/bin之前。

现在,如何设置Web服务器的$PATH?根据您的服务器(Apache、Nginx…)和您的发行版,有不同的可能性。对于类似Debian系统上的Apache,它通常是/etc/apache2/envvars

如果还没有定义PATH,只需添加以下行:

export PATH="/opt/local/php5/bin:$PATH"

(请注意,开头的PATH没有$符号。)

然后重新启动您的Web服务器。