【问题标题】:Capturing PNG stream with PHP output buffer使用 PHP 输出缓冲区捕获 PNG 流
【发布时间】:2014-06-24 12:16:04
【问题描述】:

我目前正在尝试编写一个为给定字符串生成 QR 码的 Web 服务。我正在使用 PHP 二维码 (http://phpqrcode.sourceforge.net/) 生成二维码,如下所示:

QRcode::png('PHP QR Code :)');

结果:屏幕上显示二维码的 PNG 流。 由于这是一个直接输出到浏览器的 void 函数,这会阻止我正确返回图像。

我想用 PHP 的输出缓冲区捕获 PNG 流,并让我的 Web 服务返回这个捕获的图像。 为了测试目的,我在一个普通的 php 页面上设置了以下测试代码:

include('/vendor/phpqrcode/qrlib.php');

$scancode = "testcode";

ob_implicit_flush(false); //just in case
ob_start();
QRcode::png($scancode);
$output = ob_get_contents();
ob_end_clean();
echo "--" . $output . "--";
die();

但是,当我运行代码时,缓冲区没有按我的计划工作。无论我做什么,只要我调用该函数,就会始终显示损坏的图像。当我删除输出缓冲区代码时,二维码会呈现在屏幕上。

为什么我的一些输出没有被捕获?

编辑:相关:phpqrcode library return image as a string

【问题讨论】:

    标签: php stream output-buffering


    【解决方案1】:

    删除 header("content-type:image/png");

    让它与输出缓冲一起工作。

    以后可以回显

    header("content-type:image/png"); 和您捕获的输出以显示图像

    【讨论】:

    • 非常感谢您的回复,这很有道理。不过,在上述代码的上下文中,我将如何做到这一点?我尝试添加 header_remove("content-type:image/png") 但无济于事。我不得不说我不知道​​ 100% 这一切在后台是如何运作的。我认为我必须修改生成图像的函数并尝试在其中剥离标题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多