在PHP中发送HTTP GET请求(不要返回目标URL的内容,只需执行它)

在PHP中发送HTTP GET请求(不要返回目标URL的内容,只需执行它),php,http,request,Php,Http,Request,我一直在与PHP中一个非常奇怪的场景作斗争。我有一个主脚本,它可以创建一些HTML(包括一个google图形)。但它有一些MPDF库无法呈现的标记。以下是我所做的: 创建了一个新文件g_chart.php,其中包含所有图形生成代码,如下所示: <meta charset="UTF-8"> <script> var save_as_file = '<?php echo $_GET['file']; ?>'; </script> <s

我一直在与PHP中一个非常奇怪的场景作斗争。我有一个主脚本,它可以创建一些HTML(包括一个google图形)。但它有一些MPDF库无法呈现的
标记。以下是我所做的:

创建了一个新文件
g_chart.php
,其中包含所有图形生成代码,如下所示:

<meta charset="UTF-8">

<script>
    var save_as_file = '<?php echo $_GET['file']; ?>';
</script>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript" src="http://canvg.googlecode.com/svn/trunk/rgbcolor.js"></script> 
<script type="text/javascript" src="http://canvg.googlecode.com/svn/trunk/canvg.js"></script>

<script>

google.load('visualization', '1', {packages: ['corechart', 'bar']});
google.setOnLoadCallback(drawBasic);

function drawBasic() {

      var data = google.visualization.arrayToDataTable([
        ['City', '2010 Population',],
        ['حواس', 8175000],
        ['انسانی جسم کے حصوں کے نام اور افعال', 3792000],
        ['Chicago, IL', 2695000],
        ['Houston, TX', 2099000],
        ['صوتیات : ہجے اور الفاظ', 1526000]
      ]);

      var options = {
        title: 'Population of Largest U.S. Cities',
        chartArea: {width: '50%'},
        hAxis: {
          title: 'Total Population',
          minValue: 0
        },
        vAxis: {
          title: 'City'
        }
      };

      var chart = new google.visualization.BarChart(document.getElementById('chart_div'));

      google.visualization.events.addListener(chart, 'ready', function () {
          chart_div.innerHTML = '<img src="' + chart.getImageURI() + '">';
      });

      chart.draw(data, options);

      var img_src = $('#chart_div img').attr('src');
      $('#chart_div').after('<form name="frm_img"><input type="hidden" name="img_src" value="'+img_src+'"></form>'); 

      SaveToDisk();
}


function SaveToDisk() {

    var oform = $('form[name="frm_img"]');
    var datastring = oform.serialize();

    $.ajax({
        type    : "POST",
        url     : "g_chart_save.php?file="+save_as_file,
        data    : datastring,
        cache   : false,
        async   : true,
        success : function(html){

        }
    });

}

</script>

<div id="chart_div"></div>
<?php

if (!empty($_POST)) {

    $img_src = $_POST['img_src'];
    $file = $_GET['file'];

    $image = base64_to_jpeg( $img_src, $file.'.png' );

}

function base64_to_jpeg($base64_string, $output_file) {
    $ifp = fopen($output_file, "wb"); 

    $data = explode(',', $base64_string);

    fwrite($ifp, base64_decode($data[1])); 
    fclose($ifp); 

    return $output_file; 
}

?>

var将_另存为_文件=“”;
load('visualization','1',{packages:['corechart','bar']});
setOnLoadCallback(rubsic);
函数(SIC){
var data=google.visualization.arrayToDataTable([
[‘城市’、‘2010年人口’,],
['حواس', 8175000],
['انسانی جسم کے حصوں کے نام اور افعال', 3792000],
[伊利诺伊州芝加哥,2695000],
[德克萨斯州休斯顿,2099000],
['صوتیات : ہجے اور الفاظ', 1526000]
]);
变量选项={
标题:“美国最大城市的人口”,
图表区:{宽度:'50%},
哈克斯:{
标题:“总人口”,
最小值:0
},
言辞:{
标题:“城市”
}
};
var chart=new google.visualization.BarChart(document.getElementById('chart_div'));
google.visualization.events.addListener(图表'ready',函数(){
chart_div.innerHTML='';
});
图表绘制(数据、选项);
var img_src=$('chart#div img').attr('src');
元(“#图表分区”)。在(“”)之后;
SaveToDisk();
}
函数SaveToDisk(){
形式变量=$('form[name=“frm_img”]”);
var datastring=oform.serialize();
$.ajax({
类型:“POST”,
url:“g_chart_save.php?file=“+save_as_file,
数据:datastring,
cache:false,
async:true,
成功:函数(html){
}
});
}
g_chart_save.php文件如下:

<meta charset="UTF-8">

<script>
    var save_as_file = '<?php echo $_GET['file']; ?>';
</script>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript" src="http://canvg.googlecode.com/svn/trunk/rgbcolor.js"></script> 
<script type="text/javascript" src="http://canvg.googlecode.com/svn/trunk/canvg.js"></script>

<script>

google.load('visualization', '1', {packages: ['corechart', 'bar']});
google.setOnLoadCallback(drawBasic);

function drawBasic() {

      var data = google.visualization.arrayToDataTable([
        ['City', '2010 Population',],
        ['حواس', 8175000],
        ['انسانی جسم کے حصوں کے نام اور افعال', 3792000],
        ['Chicago, IL', 2695000],
        ['Houston, TX', 2099000],
        ['صوتیات : ہجے اور الفاظ', 1526000]
      ]);

      var options = {
        title: 'Population of Largest U.S. Cities',
        chartArea: {width: '50%'},
        hAxis: {
          title: 'Total Population',
          minValue: 0
        },
        vAxis: {
          title: 'City'
        }
      };

      var chart = new google.visualization.BarChart(document.getElementById('chart_div'));

      google.visualization.events.addListener(chart, 'ready', function () {
          chart_div.innerHTML = '<img src="' + chart.getImageURI() + '">';
      });

      chart.draw(data, options);

      var img_src = $('#chart_div img').attr('src');
      $('#chart_div').after('<form name="frm_img"><input type="hidden" name="img_src" value="'+img_src+'"></form>'); 

      SaveToDisk();
}


function SaveToDisk() {

    var oform = $('form[name="frm_img"]');
    var datastring = oform.serialize();

    $.ajax({
        type    : "POST",
        url     : "g_chart_save.php?file="+save_as_file,
        data    : datastring,
        cache   : false,
        async   : true,
        success : function(html){

        }
    });

}

</script>

<div id="chart_div"></div>
<?php

if (!empty($_POST)) {

    $img_src = $_POST['img_src'];
    $file = $_GET['file'];

    $image = base64_to_jpeg( $img_src, $file.'.png' );

}

function base64_to_jpeg($base64_string, $output_file) {
    $ifp = fopen($output_file, "wb"); 

    $data = explode(',', $base64_string);

    fwrite($ifp, base64_decode($data[1])); 
    fclose($ifp); 

    return $output_file; 
}

?>

基本上,当我在浏览器中调用
g_chart.php?file=graph
时。生成“我的图形”并将其保存到与物理
graph.png
文件相同的目录中

通过创建上述解决方案,我现在必须从主脚本的php文件(即运行时)调用这个图形生成脚本
g_chart.php?file=graph

我使用了以下方法来实现这一点:

  • 卷曲
  • 福彭
  • 文件\u获取\u内容
  • 流\u上下文\u创建
  • HttpRequest
  • 每次我使用上述任何一种方法时,它都会命中目标文件
    g_chart.php
    ,但实际上它不会执行它,而是返回我在目标文件中编写的内容或代码

    我希望它以静默方式执行,以便创建图形的图像文件,然后我可以将其包含在PDF中

    请记住,稍后我将在GET请求中将图形数据传递给目标文件,以便使其成为动态的


    任何帮助都将不胜感激。

    因为您描述的过程依赖于客户端Javascript来执行,所以这种方法不起作用。Curl和其他各种通过http绑定文档的方法只能做到这一点


    但是,您可以使用来实现所需的结果。使用它,您可能可以编写脚本来提取图形图像,而无需使用PHP将其发回Web服务器。

    因为javascript是由浏览器执行的:。你需要模仿它来得到你想要的东西,比如模仿?这个术语对我来说似乎是全新的,你能解释一下吗?我很感激你的宝贵建议,但我不知道如何在PHP脚本中使用PhantomJS,或者如何在google graph API上从外部提取图形。你能给我一个开始吗?PhantomJS需要安装在你想要执行工作的服务器上。然后使用脚本文件名作为参数执行其二进制文件,如下所示:
    phantomjs myscript.js
    。脚本API在站点上有很好的文档记录,并且有很多Exmaple几乎完成了您想要完成的任务,因此您可能可以从提供的示例代码中组合一些内容。祝你好运今天试过了,发现真的很有帮助。幻影很好。谢谢你的建议。