Ich verwende die FPDF-Klasse, um auf meiner Website ein PDF zu generieren. Alles hat gut funktioniert, bis ich in den letzten Wochen Fehler bekam:
FPDF error: Some data has already been output, can't send PDF file
In den letzten Wochen habe ich nichts an meinem Code geändert, und ich habe auch nach fpdf-Ausgaben (einschließlich unnötiger Speicherplätze vor PHP, deaktivierte Stücklisten-Signatur usw.) gesucht.
Ich habe meine Website auf 000webhost.com, also habe ich auch den Analysecode am Ende der Seite deaktiviert, aber das PDF funktioniert immer noch nicht. Die einzige Spur, die ich hinterlassen habe, ist "" in einem Quellcode ("ich kann es sehen, wenn ich den Quellcode in Chrome-Browser überprüfe)".
Ich kann nicht einmal an diesem einfachen Beispiel arbeiten:
<?php
require('fpdf.php');
$pdf = new FPDF();
$pdf->AddPage()
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
?>
Gibt es eine Möglichkeit, andere Ausgaben auf der Webseite durch PHP zu deaktivieren? oder verwendet jemand fpdf auf 000webhost?
Ich denke, session.auto_start
ist auf 1 gesetzt. Dadurch wird eine Sitzung gestartet und ein PHPSESSID
-Cookie an den Browser gesendet.
Sie können versuchen, es mithilfe des folgenden Codes zu deaktivieren:
<?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();
?>
Wenn session.auto_start
nicht auf 0 eingestellt ist, versuchen Sie Folgendes:
<?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();
?>
einfach einfügen ob_end_clean (); vor der Ausgabe.
<?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();
?>
Dieser Fehler tritt auf, wenn Sie versuchen, PDF zu generieren, nachdem Sie bereits etwas anderes auf dieser Browserseite gerendert haben, z. B. wenn Sie Folgendes getan haben:
echo $ value;
Der FPDF-Code möchte eine "leere Leinwand", auf der seine Ausgabe dargestellt werden soll (oder, vermutet man, ein leerer iframe, obwohl ich das noch nicht getestet habe).
Verwenden Sie die Zeile wie folgt:
require('fpdf.php'); ob_end_clean(); header("Content-Encoding: None", true);
Problem wird gelöst;)
In meinem Fall hatte ich eingestellt:
ini_set('display_errors', 'on');
error_reporting(E_ALL | E_STRICT);
Bei der Anforderung zur Erstellung des Berichts wurden im Browser einige Warnungen angezeigt (z. B. die Verwendung veralteter Funktionen).
Durch Aktivieren der Option off
der Option display_errors
wurde der Bericht erfolgreich erstellt.
Ich habe dies gesetzt, um dieses Problem am Anfang zu beheben (ob_clean) ändert die Struktur von PDF_ nicht:
require('fpdf/fpdf.php');
ob_clean();
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
Fehler: Einige Daten wurden bereits ausgegeben, die Datei PDF kann nicht gesendet werden.