Mac OS X上的phantomjs可以从命令行运行,而不是通过exec()

时间:2013-09-25 15:24:18

标签: php phantomjs

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

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

但是,在PHP中,使用相同的用户(xyz),我得到错误代码5

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

我正在使用MAMP,而exec()通常运行正常。 如果有人知道如何调试这个我会非常感激!

3 个答案:

答案 0 :(得分:4)

感谢Amal Murali指出我正确的方向!

这也记录在exec() command on mac osx returns 5中,可以通过取消设置DYLD_LIBRARY_PATH来修复。

以下命令将起作用:

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

干杯,

阿尔伯特。

答案 1 :(得分:0)

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

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

2>&1表示将标准错误发送到重定向标准输出的位置。有关详细信息,请参阅this答案。

答案 2 :(得分: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

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