【问题标题】:FPDF error: Some data has already been output, can't send PDF file on 000webhostFPDF 错误:一些数据已经输出,无法在 000webhost 上发送 PDF 文件
【发布时间】:2013-08-11 13:32:34
【问题描述】:

我正在使用 FPDF 类在我的网站上生成 pdf。一切都很好,直到最后几周我开始出错:

FPDF error: Some data has already been output, can't send PDF file

在过去的几周里,我的代码没有任何改变,我还检查了除 fpdf 之外的任何输出(包括 php 之前的不必要空格、禁用的 BOM 签名等)

我的网站位于 000webhost.com,因此我还禁用了页面末尾的分析代码,但 pdf 仍然无法正常工作。我留下的唯一痕迹是源代码中神秘的“”(我在 Chrome 浏览器中查看源代码时可以看到)。

即使是这个简单的例子我也无法开始工作:

<?php
require('fpdf.php');
$pdf = new FPDF();
$pdf->AddPage()
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
?>

有没有办法通过 php 禁用网页上的任何其他输出?还是有人在 000webhost 上使用 fpdf?

【问题讨论】:

  • fpdf.php 是来自 www.fpdf.org 的标准类文件,没有弄乱它
  • 在这种情况下,"" 表示您的主机正在做一些愚蠢的事情。我会换一个更好的主人。

标签: php fpdf


【解决方案1】:

只需插入 ob_end_clean();在输出之前。

<?php
require('fpdf.php');
$pdf = new FPDF();
$pdf->AddPage()
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
ob_end_clean();
$pdf->Output();
?>

【讨论】:

  • 我正在测试 XAMPP 的 CD Collection 示例应用程序。这行得通,谢谢。
  • 我可以用变量替换字符串“Hello World”吗?我有很多字符串要添加到那里。
  • ob_end_flush(); ob_end_clean(); 为我工作,是的,他们两个!
  • 年度最佳答案
【解决方案2】:

我认为 session.auto_start 设置为 1。这将启动一个会话并向浏览器发送一个 PHPSESSID cookie。

您可以尝试使用以下代码禁用它:

<?php
ini_set("session.auto_start", 0);
require('fpdf.php');
$pdf = new FPDF();
$pdf->AddPage()
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
?>

如果将session.auto_start 设置为 0 不起作用,请尝试以下操作:

<?php
ob_start();
require('fpdf.php');
$pdf = new FPDF();
$pdf->AddPage()
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
ob_end_flush(); 
?>

【讨论】:

  • 在脚本中设置它肯定为时已晚?如果这是问题所在,这需要在 php.ini 中完成
  • 也(虽然这可能是问题)它没有解释 "" 的输出。
  • true 但手册声称它是 PHP_INI_ALL(可以在任何地方设置条目)所以它应该可以工作,如果它不起作用,则手册对此设置不正确
  • ob_end_flush(); ob_end_clean(); 为我工作,是的,他们两个!
【解决方案3】:

在我的情况下,我已经设置:

ini_set('display_errors', 'on');
error_reporting(E_ALL | E_STRICT);

当我发出生成报告的请求时,浏览器中显示了一些警告(例如使用了已弃用的函数)。
offdisplay_errors选项,报告生成成功。

【讨论】:

    【解决方案4】:

    使用这样的行:

    require('fpdf.php');    ob_end_clean();    header("Content-Encoding: None", true);
    

    问题将得到解决;)

    【讨论】:

      【解决方案5】:

      如果您在该浏览器页面上渲染了其他内容后尝试生成 PDF,则会发生此错误,例如,如果您执行了以下操作:

      回显 $value;

      FPDF 代码需要一个“空白画布”来呈现其输出(或者,有人推测,一个空白 iframe,虽然我还没有测试过)。

      【讨论】:

        【解决方案6】:
        SELECT motivo, 
               unidad_trans, 
               km_inicial, 
               km_final, 
               rut_chofer, 
               To_char(hora_inicial, 'DD/MM/YYYY HH:mm'), 
               To_char(hora_final, 'DD/MM/YYYY HH:mm'), 
               total_recorrido, 
               destino, 
               cod_combustible, 
               cantidad_litros, 
               cod_vehiculo, 
               d.cod_estableci 
        FROM   mov_bitacora b, 
               mov_chofer c, 
               nuc_dependencias d, 
               mov_combustible co, 
               mov_vehiculo v 
        WHERE  b.unidad_tran = d.cod_estableci 
               AND b.rut_chofer = c.rut_chofer 
               AND b.cod_combustible = co.cod_combustible 
               AND b.cod_vehiculo = v.cod_vehiculo 
               AND id_bitacora = 6fpdf 
        

        错误:部分数据已输出,无法发送PDF文件。

        【讨论】:

          【解决方案7】:

          我在开始时(ob_clean)不改变 PDF 结构是为了解决这个问题:

          require('fpdf/fpdf.php');
          ob_clean();
          

          【讨论】:

            最近更新 更多