exec()和phantomjs问题与绝对路径

我正在使用phantomJS来编程捕捉网页的屏幕截图。 我的网络服务器在Linux 64位上运行。

情景

我的test.php文件

exec('./phantomjs --version', $o, $e);
print_r($o);
echo $e;

我在浏览器中打开test.php 。 我得到的结果是:

1.9.1 // version number
0 // exit code

这证明我可以通过exec()运行命令,而phantomJS正在完美运行。

问题

现在,当我用以下代码替换上述代码时:

exec('./phantomjs http://mywebsite.com/test.js', $o, $e);
print_r($o);
echo $e;

输出是:

Array ( ) // empty output
139 // exit code which on investigating turned out to be segmentation fault

我也试过:

exec('./phantomjs ./test.js', $o, $e); // since phantomjs and test.js are in same folder

但结果是一样的(段错误)

test.js代码:

var page = require('webpage').create();
var url = 'http://www.rediff.com/';
page.open(url, function (status) {
    phantom.exit();
});

这让我相信使用完整路径作为phantomJS的第二个参数会导致它崩溃。 因此,我想知道的事情是:

  • 我的想法是否正确?
  • 或者是因为我的web服务器阻止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);
    

    我不是最好的服务器管理员,所以我无法详细解释所有内容,但上面的代码生成了pdf。 是啊。


    我有类似的问题。 PHP + PhantomJS栅格化我发现phantomjs不喜欢从apache进程运行。 尝试从命令行运行您的exec命令:

    php -r "exec('./phantomjs http://mywebsite.com/test.js', $o, $e); print_r($o); echo $e;"
    

    如果这可行,你有几个选择:

    1.)有些人建议修改sudoers,以便为apache用户提供没有密码sudo权限的phantomjs二进制文件

    2.)像我一样做,并将脚本作为cron运行。


    尝试将test.js放在test.php所在的文件夹(调用exec('./phantomjs ./test.js', $o, $e); )或使用完整路径时。

    链接地址: http://www.djcxy.com/p/74125.html

    上一篇: exec() and phantomjs issue with absolute paths

    下一篇: Setting write permissions on Django Log files