Php 从Google POST请求保存PNG

Php 从Google POST请求保存PNG,php,stream,Php,Stream,我有一个简单的代码,它将来自GooglePost请求的流作为PNG输出。它是用来使用谷歌创建QRcode的。但我想做的是将其保存为服务器上的PNG文件,我似乎不知道如何进行,因为我不太熟悉使用流。代码如下: <?php //This script will generate the slug ID and create a QRCode by requesting it from Google Chart API header('content-type: image/p

我有一个简单的代码,它将来自GooglePost请求的流作为PNG输出。它是用来使用谷歌创建QRcode的。但我想做的是将其保存为服务器上的PNG文件,我似乎不知道如何进行,因为我不太熟悉使用流。代码如下:

<?php

    //This script will generate the slug ID and create a QRCode by requesting it from Google Chart API
    header('content-type: image/png');

    $url = 'https://chart.googleapis.com/chart?';
    $chs = 'chs=150x150';
    $cht = 'cht=qr';
    $chl = 'chl='.urlencode('Hello World!');

    $qstring = $url ."&". $chs ."&". $cht ."&". $chl;       

    // Send the request, and print out the returned bytes.
    $context = stream_context_create(
        array('http' => array(
            'method' => 'POST',
            'content' => $qstring
    )));
    fpassthru(fopen($url, 'r', false, $context));

?>

这是一种方法,根据您的代码和指定的“在我的服务器上将其另存为PNG文件”:

<?php
$url = 'https://chart.googleapis.com/chart?';
$chs = 'chs=150x150';
$cht = 'cht=qr';
$chl = 'chl='.urlencode('Hello World!');

$qstring = $url ."&". $chs ."&". $cht ."&". $chl;       

$data = file_get_contents($qstring);

$f = fopen('file.png', 'w');
fwrite($f, $data);
fclose($f);

要将结果写入文件,请使用fwrite()而不是fpassthru()

您可以使用file_get_contents()和file_put_contents(),但这需要将整个图像存储在一个字符串中,对于大型图像,这可能会占用大量内存。这不是一个问题,因为qrcode图像很小,但总的来说值得考虑

您实际上不需要创建流上下文,因为web服务可以使用HTTPGET而不是POST正常工作

还有一个名为http_build_query()的函数,可用于简化URL的构建

<?php

$url = 'https://chart.googleapis.com/chart?' . http_build_query(array(
    'chs' => '150x150',
    'cht' => 'qr',
    'chl' => 'Hello World!'
));

$src = fopen($url, 'rb');
$dst = fopen('file.png', 'w');
while (!feof($src)) {
    fwrite($dst, fread($src, 1024));
}

?>


它必须是帖子吗?生成的url可以作为一个简单的GET请求使用,这意味着您可以使用
echo file\u GET\u contents(…)
来代替。它可以是一个GET请求,但我仍然不确定如何保存它<代码>文件内容('qr.png',文件内容(…)
fpassthru()用于将输出直接发送到客户端。对于您的代码,您可能希望在先前打开的文件句柄上使用fwrite()。啊,好的,我已经让它工作了!容易多了!我试图把溪流拉入细绳,但我真的很难与之搏斗。执行简单的URL获取请求工作。我会发布代码作为答案。请让我知道如何使用logoHi Daren创建二维码,它工作得很好。但是我怎样才能把我的标识添加到这个条形码图像的中心呢。有什么想法请分享