Я использую класс FPDF для создания pdf-файла на своем веб-сайте. Все прошло хорошо, пока последние несколько недель, когда я начал получать ошибку:
FPDF error: Some data has already been output, can't send PDF file
В течение последних нескольких недель ничего не изменилось в моем коде, и я также проверил на любой выход execpt fpdf (включая ненужное пространство перед php, отключенную подпись спецификации и т. Д.),
У меня есть мой веб-сайт на 000webhost.com, поэтому я также отключил аналитический код в конце страницы, но файл по-прежнему не работает. Единственная трассировка, которую я оставил, является мистическим "" в исходном коде (я вижу это при проверке исходного кода в браузере Chrome).
Я не могу работать даже на этом простом примере:
<?php require('fpdf.php'); $pdf = new FPDF(); $pdf->AddPage() $pdf->SetFont('Arial','B',16); $pdf->Cell(40,10,'Hello World!'); $pdf->Output(); ?>
Есть ли способ отключить любой другой вывод на веб-странице php? или кто-то использует fpdf на 000webhost?
Я думаю, что session.auto_start
установлен в 1. Это запустит сеанс и отправит cookie PHPSESSID
в браузер.
Вы можете попытаться отключить его, используя следующий код:
<?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(); ?>
Если установка session.auto_start
в 0 не работает, попробуйте следующее:
<?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(); ?>
просто вставьте ob_end_clean (); перед выводом.
<?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(); ?>
В моем случае я установил:
ini_set('display_errors', 'on'); error_reporting(E_ALL | E_STRICT);
Когда я сделал запрос на создание отчета, некоторые предупреждения были отображены в браузере (например, использование устаревших функций).
off
опции display_errors
, отчет был сгенерирован успешно.
Используйте строку следующим образом:
require('fpdf.php'); ob_end_clean(); header("Content-Encoding: None", true);
Проблема будет решена;)
Эта ошибка возникнет, если вы попытаетесь сгенерировать PDF-файл после того, как вы уже сделали что-то еще на этой странице браузера, например, если вы сделали что-то вроде этого:
echo $ value;
Код FPDF хочет, чтобы «пустой холст» отображал свой вывод (или, предположим, пустой iframe, хотя я еще не тестировал это).
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
Ошибка: некоторые данные уже выведены, не удается отправить файл PDF.
Я поместил это, чтобы исправить эту проблему в начале (ob_clean) не меняет структуру PDF:
require('fpdf/fpdf.php'); ob_clean();