2013-08-11 17 views
5

Używam klasy FPDF do generowania pliku pdf na mojej stronie. Wszystko działało dobrze aż do ostatnich kilku tygodni, kiedy zaczęła się błąd:Błąd FPDF: Niektóre dane zostały już wyprowadzone, nie można wysłać pliku PDF na 000webhost

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

W ciągu ostatnich kilku tygodni nie zmienia niczego w moim kodu i mam również sprawdzane pod kątem dowolnego wyjścia execpt z FPDF (w tym unecessary przestrzeni przed php, niepoprawny podpis BOM itp.)

Mam swoją stronę na 000webhost.com, więc wyłączyłem również kod analityczny na końcu strony, ale plik PDF nadal nie działa. Jedyny ślad, jaki mi pozostał, to "tajemniczy" kod źródłowy (widzę go podczas sprawdzania kodu źródłowego w przeglądarce Chrome).

nie mogę dostać się do pracy nawet ten prosty przykład:

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

Czy istnieje sposób, aby wyłączyć wszelkie inne wyjście na stronie internetowej przez php? czy ktoś używa fpdf na 000webhost?

+0

dla fpdf.php? – Dave

+0

fpdf.php to standardowy plik klasy z www.fpdf.org, nie zadzieraj z nim – user1857756

+0

W takim przypadku '" "' oznacza, że ​​twój host robi coś głupiego. Przestawiłbym się na lepszego gospodarza. – Dave

Odpowiedz

11

Myślę, że session.auto_start jest ustawiony na 1. Spowoduje to uruchomienie sesji i wysłanie do przeglądarki pliku cookie o nazwie PHPSESSID.

Można spróbować wyłączyć go za pomocą następującego kodu:

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

w ustalaniu session.auto_start 0 nie działa przypadku, a następnie spróbuj tego:

<?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(); 
?> 
+0

z pewnością ustawienie w skrypcie będzie za późno? Jeśli jest to problem, należy to zrobić również w php.ini – Dave

+0

(chociaż może to być problem), nie wyjaśnia to wyjścia "" ". – Dave

+0

prawda, ale instrukcja twierdzi, że to PHP_INI_ALL (wpis można ustawić w dowolnym miejscu), więc powinien działać, jeśli to nie działa, instrukcja jest nieprawidłowa w odniesieniu do tego ustawienia –

19

wystarczy włożyć ob_end_clean(); przed wyjściem.

<?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(); 
?> 
+0

Testowałem przykładową aplikację XAMPP 'CD Collection'. To zadziałało, dzięki. – silver

+0

Czy mogę zastąpić ciąg "Hello World" zmienną. Mam dużo ciągów do dodania. –

+0

'ob_end_flush(); ob_end_clean(); 'pracował dla mnie, tak, obaj! –

1

W moim przypadku miałem ustawione:

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

Kiedy złożyła wniosek, aby wygenerować raport, niektóre ostrzeżenia były wyświetlane w przeglądarce (jak korzystanie z nieaktualnych funkcji).
Włączanie off opcji display_errors, raport został wygenerowany pomyślnie.

1

Zastosowanie linia tak:

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

problem zostanie rozwiązany;)

0

Błąd ten występuje w przypadku próby generowania PDF po już wydanego coś innego na tej stronie przeglądarki, na przykład , jeśli zrobiłeś coś takiego:

echo $ wartość;

Kod FPDF żąda "pustego płótna" do renderowania jego wyjścia (lub, jak przypuszcza, pustego elementu iframe, chociaż jeszcze tego nie przetestowałem).

0
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 

Error: Some data has already been output, can't send PDF file.

0

ja putted to, aby rozwiązać ten problem w początku działalności (ob_clean) nie zmienia strukturę PDF:

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