使用PhantomJS创建用于PDF创建(PHP)的HighCharts grahps服务器端-导致PHPs exec()的退出代码11;

使用PhantomJS创建用于PDF创建(PHP)的HighCharts grahps服务器端-导致PHPs exec()的退出代码11;,php,highcharts,phantomjs,Php,Highcharts,Phantomjs,我正在尝试创建使用Higharts服务器端生成的图形图像,以用于PDF创建 我已经在Centos 6.5服务器上安装了PhantomJS,以便运行生成Highcharts图像 我正在使用PHP,并且正在努力理解实际“运行”javascript所需的步骤,该javascript将生成保存在服务器端的图像,以便与我的PDF一起使用(我正在使用mPDF生成PDF) 我需要的过程是: 用户单击“下载PDF” 几个图表和图形在服务器端生成,保存到服务器上的一个文件中 mPDF可以在构建PDF并提供下载时

我正在尝试创建使用Higharts服务器端生成的图形图像,以用于PDF创建

我已经在Centos 6.5服务器上安装了PhantomJS,以便运行生成Highcharts图像

我正在使用PHP,并且正在努力理解实际“运行”javascript所需的步骤,该javascript将生成保存在服务器端的图像,以便与我的PDF一起使用(我正在使用mPDF生成PDF)

我需要的过程是:

  • 用户单击“下载PDF”
  • 几个图表和图形在服务器端生成,保存到服务器上的一个文件中
  • mPDF可以在构建PDF并提供下载时参考这些文件
以下是我到目前为止所做的尝试

从PHP运行PhantomJS 在堆栈溢出问题“如何从PHP执行PhantomJS”之后,我推断我可以以这种方式运行PhantomJS应用程序

exec('/usr/bin/phantomjs test.js');
其中test.js是一个javascript文件,包含构建highchart和生成相关图形的导出图像文件(PNG格式)所需的javascript

为PhatomJS测试exec()方法 我已经通过测试测试了使用php成功运行phatomjs

exec('/usr/bin/phantomjs--version',$o,$e)

印刷费($o); echo$e

这正确地给出了我的phantomJS版本号(1.9.8)和一个0错误代码(表示没有错误),因此我认为phantomJS已经启动并运行正常,我使用了正确的路径来访问它,并且似乎正在执行它

创建一个Javascript文件,该文件将生成图形的服务器端图像

在回答与我类似的问题后,我推断test.js文件的形式应该是这样的:

var system = require('system');
var page = require('webpage').create();
var fs = require('fs');

// load JS libraries
page.injectJs("https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js");
page.injectJs("/js/highcharts/highcharts.js");
page.injectJs("/js/highcharts/modules/exporting.js");



// chart demo
var args = {
    width: 600,
    height: 500
};

var svg = page.evaluate(function(opt){
    $('body').prepend('<div id="container"></div>');

    var chart = new Highcharts.Chart({
        chart: {
            renderTo: 'container',
            width: opt.width,
            height: opt.height
        },
        exporting: {
            enabled: false
        },
        title: {
            text: 'Combination chart'
        },
        xAxis: {
            categories: ['Apples', 'Oranges', 'Pears', 'Bananas', 'Plums']
        },
        yAxis: {
            title: {
                text: 'Y-values'
            }
        },
        labels: {
            items: [{
                html: 'Total fruit consumption',
                style: {
                    left: '40px',
                    top: '8px',
                    color: 'black'
                }
            }]
        },
        plotOptions: {
            line: {
                dataLabels: {
                    enabled: true
                },
                enableMouseTracking: false
            },
            series: {
                enableMouseTracking: false, 
                shadow: false, 
                animation: false
            }
        },
        series: [{
            type: 'column',
            name: 'Andrii',
            data: [3, 2, 1, 3, 4]
        }, {
            type: 'column',
            name: 'Fabian',
            data: [2, 3, 5, 7, 6]
        }, {
            type: 'column',
            name: 'Joan',
            data: [4, 3, 3, 9, 0]
        }, {
            type: 'spline',
            name: 'Average',
            data: [3, 2.67, 3, 6.33, 3.33],
            marker: {
                lineWidth: 2,
                lineColor: 'white'
            }
        }, {
            type: 'pie',
            name: 'Total consumption',
            data: [{
                name: 'Andrii',
                y: 13,
                color: '#4572A7'
            }, {
                name: 'Fabian',
                y: 23,
                color: '#AA4643'
            }, {
                name: 'Joan',
                y: 19,
                color: '#89A54E'
            }],
            center: [100, 80],
            size: 100,
            showInLegend: false,
            dataLabels: {
                enabled: false
            }
        }]
    });

    return chart.getSVG();
},  args);

// Saving SVG to a file
fs.write("demo.svg", svg);
// Saving diagram as PDF
page.render('demo.pdf');

phantom.exit();
替换highcharts生成JavaCScript,但它还返回退出代码11

我认为这可能是一个写访问问题,所以测试了将其写入一个文件,并将chmod改为777。没有区别

从命令行运行上述测试脚本会导致phantomJS崩溃和分段错误

我现在还试着运行一个js文件,它根本不尝试写入服务器,只写“你好,世界!”对于控制台日志,当下面是test.js的唯一占用时,退出代码11仍然存在

console.log('Hello, world!');
phantom.exit();

这原来是物理内存的问题。我的服务器分配了2GB的内存,phantomJS每次运行时都试图分配至少1GB的内存,有时候这不是免费的,而且我会遇到分段错误

我将机器内存增加到4Gb,没有出现任何问题。

这可能与。要么返回到1.9.7并使用
--ssl protocol=tlsv1
运行它,要么使用:
函数退出(code){if(page)page.close();setTimeout(function(){phantom.exit(code);},0;phantom.onError=function(){};抛出新错误(“”;}
console.log('Hello, world!');
phantom.exit();