Сохранение PNG из запроса Google POST - PullRequest
1 голос
/ 13 октября 2011

У меня есть простой фрагмент кода, который выводит поток из запроса на публикацию в Google в виде PNG. Это для использования Google для создания QR-кода. Однако я хочу сохранить это как файл 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));

?>

Ответы [ 2 ]

2 голосов
/ 13 октября 2011

Это один из способов, основанный на вашем коде и указанный «сохранить это как файл 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);

Добавить проверку ошибок и т. Д. По вкусу.

1 голос
/ 13 октября 2011

Чтобы записать результат в файл, используйте fwrite () вместо fpassthru ().

Вы можете использовать file_get_contents () и file_put_contents (), но для этого необходимо сохранить все изображение в строке, чтоможет быть большой объем памяти для больших изображений.Это не проблема, поскольку изображения qrcode маленькие, но в целом стоит подумать.

Вам не нужно создавать потоковый контекст, поскольку вместо этого веб-служба будет работать с HTTP GET.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));
}

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...