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

标签 php http request

我一直在努力应对 PHP 中一个非常非常奇怪的场景。我有一个创建一些 HTML(包括谷歌图表)的主脚本。但它有一些<SCRIPT> 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>

g_chart_save.php文件如下:

<?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 相同的目录中文件。

通过创建上述解决方法,我现在必须调用此图形生成脚本 g_chart.php?file=graph来 self 的主脚本的 PHP 文件(在执行时,即运行时)。

我使用了以下方法来实现它:

  1. curl
  2. 打开
  3. file_get_contents
  4. stream_context_create
  5. HTTP请求

每次我使用上述任何一种方法时,它都会命中目标文件 g_chart.php但它实际上并没有执行它,而是返回了我在目标文件中编写的内容或代码。

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

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

如有任何帮助,我们将不胜感激。

最佳答案

由于您描述的过程依赖于客户端 Javascript 来执行,因此这种方法行不通。 Curl 和其他各种通过 http 访问文档的方法只能做到这一点。

但是,您可以使用 The PhantomJS headless Webkit scriptable以达到预期的效果。使用它,您可能可以编写脚本来提取图形图像,而无需使用 PHP 将其发回网络服务器。

关于php - 在 PHP 中发送 HTTP GET 请求(不返回目标 URL 的内容,只是执行它),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32715140/

相关文章:

PHP:在 MySQL 中替换字符串中的 'dollar'

php - Zerofill 与 Doctrine2

java - Retrofit 在请求中发送 base64 图像

http - 如何在 HTTP Referrer 中不包含 URL 查询字符串

session - 如何将数据放入 session 变量并在vaadin的不同页面中获取数据?

javascript - mysqli_fetch_assoc() 最奇怪的错误

php - 在Wordpress中上载主题时出错

c++ - 如何知道嗅探的数据包是否直接从网站访问而不是链接?

html - WebView 未正确加载 HTML 文件

swift - Alamofire Xcode 8 GM,缺少Mashape应用程序 key