php - 从 Google POST请求中保存 PNG

  显示原文与译文双语对照的内容
0 0

我有一个简单的代码,将来自谷歌post请求的流输出为 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));

?>

时间: 原作者:

0 0

这是一种方法,基于你的代码和指定的'将这里文件保存为我的服务器上的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);

将错误检查 等等 添加到口味。

0 0

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

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

你不需要创建流上下文,因为web服务将与 HTTP GET 一起工作,而不是发布。

还有一个称为 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));
}

?>

...