以下在用户xyz的命令行中正常工作:
/opt/local/bin/phantomjs --version
1.9.1
但是,在PHP中,使用相同的用户(xyz),我得到错误代码5
exec('/opt/local/bin/phantomjs --version', $o, $r)
echo $r
我正在使用MAMP,而exec()通常运行正常。 如果有人知道如何调试这个我会非常感激!
答案 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)。