我正在使用
phantomJS来编程获取网页的屏幕截图.我的网络服务器在Linux 64位上运行.
情景
exec('./phantomjs --version',$o,$e); print_r($o); echo $e;@H_403_6@1.9.1 // version number 0 // exit code@H_403_6@这证明我可以通过exec()运行命令,并且phantomJS工作正常.
问题
exec('./phantomjs http://mywebsite.com/test.js',$e); print_r($o); echo $e;@H_403_6@输出是:
Array ( ) // empty output 139 // exit code which on investigating turned out to be segmentation fault@H_403_6@我也尝试过:
exec('./phantomjs ./test.js',$e); // since phantomjs and test.js are in same folder@H_403_6@但结果是一样的(段错误)
test.js代码:
var page = require('webpage').create(); var url = 'http://www.rediff.com/'; page.open(url,function (status) { phantom.exit(); });@H_403_6@这让我相信使用完整路径作为phantomJS的第二个参数会导致它崩溃.因此,我想知道的是:
>我的假设是对的吗?
>或者是因为我的网络服务器的一些限制阻止了exec()通过绝对URL访问.js文件?
经过大量的搜索和测试后,我得到了以下新增功能:
//throws a lot of errors because searching some libraries $cmd = 'unset DYLD_LIBRARY_PATH ;'; $cmd.= ' /abs/path/to/phantomjs'; $cmd.= ' /abs/path/to/script.js'; //set environment variable to node source putenv('PATH=/abs/path/to/node/bin/'); //now exec the cmd and pipe the errors to stdout exec($cmd.' 2>&1',$output); //and output the results print_r($output);@H_403_6@