0

以下在用户 xyz 的命令行上可以正常工作:

/opt/local/bin/phantomjs --version
1.9.1

但是,在 PHP 中,对于同一个用户(xyz),我得到一个错误代码 5

exec('/opt/local/bin/phantomjs --version', $o, $r)
echo $r

我正在使用 MAMP,并且 exec() 通常可以正常工作。如果有人知道如何调试这个,我会非常感激!

4

3 回答 3

4

感谢 Amal Murali 为我指明了正确的方向!

这也记录在 mac osx 上的 exec() 命令返回 5中,并且可以通过取消设置 DYLD_LIBRARY_PATH 来修复。

以下命令将起作用:

exec('unset DYLD_LIBRARY_PATH ; /opt/local/bin/phantomjs --version', $o, $r)
echo $r

干杯,

阿尔伯特。

于 2013-09-25T16:41:52.627 回答
0

很可能是环境变量的问题。macports 的一个常见问题是使用 OSX 附带的 'stock' apachectl(位于 /usr/sbin/apachectl)而不是位于 /opt/local/apache2/bin/apachectl 的 macports apachectl。

在大多数情况下,库存版本似乎可以正常工作。但是,只有 macports 版本会建立正确的环境(即,使用 /opt/local/apache2/bin/envvars,并正确设置 DYLD_FALLBACK_LIBRARY_PATH。

如果您运行sudo apachectl以控制 apache,您可能正在运行 apachectl 的股票版本。

您可能想要删除它(或将其重命名为 /usr/sbin/apachectl.orig)并符号链接而不是 macports 版本:

mv /usr/bin/apachectlapachectl /usr/bin/apachectlapachectl.orig
ln /opt/local/apache2/bin/apachectl /usr/bin/apachectl

如果您仍然遇到问题,那么您可能需要深入研究 apache 使用的环境变量(并因此传递给 php)。

于 2014-01-11T09:08:51.123 回答
0

2>&1通过在命令末尾附加来重定向输出,如下所示:

exec('/opt/local/bin/phantomjs --version 2>&1', $o, $r);
var_dump($r);

说将2>&1标准错误发送到标准输出也被重定向的地方。有关更多信息,请参阅答案。

于 2013-09-25T15:30:39.617 回答