【问题标题】:PHP failed to set HTTP header when generating bar code imagePHP 生成条形码图像时设置 HTTP 标头失败
【发布时间】:2018-01-09 10:04:01
【问题描述】:

我正在使用 composer 包Piceq\Barcode 来生成条形码图像。我只是通过简单的测试代码开始使用它:

$barCode = new Picqer\Barcode\BarcodeGeneratorPNG();
$barCode = $barCode->getBarcode($inputs['code'], $barCode::TYPE_CODE_128);

ob_clean();
header('Content-Type: image/png');
echo $barCode;

$barCode 的内容类似于生成图像的二进制内容。问题是它以 text/html 的形式发送到浏览器。我错过了什么导致 HTTP 标头设置不正确?

【问题讨论】:

  • 我的想法是标题被空白过早地发送。不确定你是否知道ob_clean(); 请注意
  • 不,我已经尝试删除标题中的空格,但仍然没有正确设置标题。根据我以前生成图像的经验,需要 ob_clean() ,但有时不需要它是对的。刚刚添加以确保不是额外的内容导致未设置标题。
  • 另一方面,我有另一个生成二维码的函数,它在声明标题时有空间。所以不太可能是空间。
  • 我已经检查过了,这个例子对我很有用。我认为以前的标头已经发送给客户端,因此您无法更改内容类型。 ob_clean 在这种情况下无能为力。
  • “不,我已经尝试删除标题中的空格” - 这不是他们的意思,他们的意思是你是否可能已经创建了输出(即使它是“只是” 空格)在此之前的任何位置。您是否启用了适当的 PHP 错误报告,以便在输出已经开始后尝试发出标头时 PHP 可以警告您?

标签: php http-headers barcode


【解决方案1】:

我不确定是什么原因,但问题原来是导致问题的echo。将echo 更改为die() 即可解决问题。

这是工作代码。

$barCode = new Picqer\Barcode\BarcodeGeneratorPNG();
$barCode = $barCode->getBarcode($inputs['code'], $barCode::TYPE_CODE_128);

header('Content-Type: image/png');
die($barCode);

【讨论】:

    猜你喜欢
    • 2017-10-30
    • 2012-02-06
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 2015-06-14
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多