2013-08-11 31 views
5

Tôi đang sử dụng lớp FPDF để tạo pdf trên trang web của mình. Tất cả mọi thứ hoạt động tốt cho đến vài tuần trước khi tôi bắt đầu nhận được lỗi:Lỗi FPDF: Một số dữ liệu đã được xuất, không thể gửi tệp PDF trên 000webhost

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

Trong vài tuần qua đã không thay đổi bất cứ điều gì trong mã của tôi và tôi cũng đã kiểm tra đối với bất kỳ sản lượng execpt các FPDF (bao gồm cả không gian hưởng ứng nhiệt liệt trước php, chữ ký BOM bị vô hiệu hóa, vv)

Tôi có trang web của mình trên 000webhost.com vì vậy tôi cũng đã vô hiệu hóa mã phân tích ở cuối trang, nhưng bản pdf vẫn không hoạt động. Dấu vết duy nhất tôi để lại là "" trong mã nguồn (tôi có thể thấy khi kiểm tra mã nguồn trong trình duyệt Chrome).

tôi không thể có được để làm việc thậm chí ví dụ đơn giản này:

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

Có cách nào để vô hiệu hóa bất kỳ đầu ra khác trên trang web bằng cách php? hoặc ai đó sử dụng fpdf trên 000webhost?

+0

mã cho fpdf.php? – Dave

+0

fpdf.php là tệp lớp chuẩn từ www.fpdf.org, không gây rối với nó – user1857756

+0

Trong trường hợp đó, '" "' ngụ ý rằng máy chủ của bạn đang làm điều gì đó ngốc nghếch. Tôi muốn chuyển sang một máy chủ tốt hơn. – Dave

Trả lời

11

Tôi nghĩ rằng session.auto_start được đặt thành 1. Điều này sẽ bắt đầu phiên và gửi cookie PHPSESSID tới trình duyệt.

Bạn có thể thử vô hiệu hóa nó bằng cách sử dụng đoạn mã sau:

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

Trong thiết session.auto_start-0 không hoạt động trường hợp, sau đó thử này:

<?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

chắc chắn thiết lập nó trong kịch bản sẽ là quá muộn? Nếu đây là vấn đề, điều này cần phải được thực hiện trong php.ini – Dave

+0

cũng (trong khi điều này có thể là vấn đề) nó không giải thích đầu ra của '" "'. – Dave

+0

đúng nhưng hướng dẫn sử dụng tuyên bố đó là một PHP_INI_ALL (Entry có thể được đặt ở bất kỳ đâu) để nó hoạt động, nếu nó không hoạt động không chính xác về thiết lập này –

19

chỉ cần chèn ob_end_clean(); trước khi xuất.

<?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

Tôi đã thử nghiệm ứng dụng mẫu 'CD Collection' của XAMPP. Điều này làm việc, cảm ơn. – silver

+0

Tôi có thể thay thế chuỗi "Hello World" bằng một biến hay không. Tôi có rất nhiều chuỗi được thêm vào đó. –

+0

'ob_end_flush(); ob_end_clean(); 'làm việc cho tôi, vâng, cả hai! –

1

Trong trường hợp của tôi, tôi đã thiết lập:

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

Khi tôi đã làm theo yêu cầu để tạo báo cáo, một số cảnh báo được hiển thị trong trình duyệt (như việc sử dụng các chức năng bị phản đối).
Bật off tùy chọn display_errors, báo cáo đã được tạo thành công.

1

Sử dụng dòng như sau:

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

Issue sẽ giải quyết;)

0

Lỗi này sẽ xảy ra nếu bạn cố gắng để tạo ra PDF sau khi bạn đã trả lại cái gì khác trên trang trình duyệt, ví dụ , nếu bạn đã làm điều gì đó như thế này:

echo $ value;

Mã FPDF muốn một "canvas trống" để hiển thị kết quả đầu ra của nó trên (hoặc, một từ, một iframe trống, mặc dù tôi chưa thử nghiệm).

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

tôi putted này để khắc phục vấn đề này trong beggining (ob_clean) không làm thay đổi cấu trúc tiếng Anh PDF:

require('fpdf/fpdf.php'); 
ob_clean(); 
Các vấn đề liên quan