Php 从Google POST请求保存PNG
我有一个简单的代码,它将来自GooglePost请求的流作为PNG输出。它是用来使用谷歌创建QRcode的。但我想做的是将其保存为服务器上的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
<?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创建二维码,它工作得很好。但是我怎样才能把我的标识添加到这个条形码图像的中心呢。有什么想法请分享