J'utilise la classe FPDF pour générer un pdf sur mon site web. Tout a bien fonctionné jusqu'aux dernières semaines, lorsque j'ai commencé à avoir une erreur:
FPDF error: Some data has already been output, can't send PDF file
Au cours des dernières semaines, rien n’a changé dans mon code et j’ai également vérifié la sortie, sauf le fpdf (y compris l’espace non nécessaire avant php, la signature BOM désactivée, etc.)
J'ai mon site Web sur 000webhost.com, j'ai donc également désactivé le code analytique à la fin de la page, mais le pdf ne fonctionne toujours pas. La seule trace qu'il me reste est "" mystérieuse dans un code source (je peux le voir lors de la vérification du code source dans le navigateur Chrome).
Je ne peux pas travailler même cet exemple simple:
<?php
require('fpdf.php');
$pdf = new FPDF();
$pdf->AddPage()
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
?>
Est-il possible de désactiver toute autre sortie sur une page Web par php? ou quelqu'un utilise-t-il fpdf sur 000webhost?
Je pense que session.auto_start
a la valeur 1. Cela va démarrer une session et envoyer un cookie PHPSESSID
au navigateur.
Vous pouvez essayer de le désactiver en utilisant le code suivant:
<?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();
?>
Si le réglage de session.auto_start
à 0 ne fonctionne pas, essayez ceci:
<?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();
?>
insérez simplement ob_end_clean (); avant de sortir.
<?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();
?>
Cette erreur se produira si vous essayez de générer le PDF après que vous ayez déjà rendu quelque chose d'autre sur cette page du navigateur, par exemple si vous avez fait quelque chose comme ça:
echo $ valeur;
Le code FPDF veut un "canevas vierge" pour rendre sa sortie (ou, supposons-le, un iframe vierge, bien que je ne l'aie pas encore testé).
Utilisez la ligne comme ceci:
require('fpdf.php'); ob_end_clean(); header("Content-Encoding: None", true);
Le problème sera résolu;)
Dans mon cas j'avais mis:
ini_set('display_errors', 'on');
error_reporting(E_ALL | E_STRICT);
Lorsque j'ai demandé à générer le rapport, certains avertissements étaient affichés dans le navigateur (comme l'utilisation de fonctions obsolètes).
En choisissant off
l'option display_errors
, le rapport a été généré avec succès.
J'ai mis ceci pour résoudre ce problème au début (ob_clean) ne change pas la structure de PDF_:
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
Erreur: Certaines données ont déjà été sorties, impossible d'envoyer le fichier PDF.