web-dev-qa-db-fra.com

Erreur FPDF: Certaines données ont déjà été sorties, impossible d'envoyer PDF fichier sur 000webhost

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?

5
user1857756

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(); 
?>
11
Raymond Nijland

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();
?>
21
user1825831

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é).

1
Lapochka

Utilisez la ligne comme ceci:

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

Le problème sera résolu;)

1
abid saleem

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.

1
Victor

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.

0
Juan Pablo