Проблема:
Ошибка TCPDF и mPDF: некоторые данные уже были отправлены в браузер, не могут отправить файл PDF, который я отказался при попытке исправить ошибку с помощью TCPDF и установить mPDF, чтобы получить ту же ошибку при попытке визуализации документа в браузере. Я могу сохранить документ просто отлично и отобразить его в браузере после извлечения.
Кроме того, эта ошибка появилась только после переключения с моего dev-сервера на мой хост-сервер. Прекрасно работает на сервере DEV (DEV server = WAMPSERVER, PROD server = Hostgator Linux).
Исправление проблем:
Я прочитал много томов других обсуждений в Интернете по этой проблеме, и я не могу найти проблему, связанную с пробелом. Я сократил запрос на следующее:
<?php ob_start(); $html = "Hello World"; include("../mpdf.php"); $mpdf=new mPDF(); $mpdf->WriteHTML($html); $mpdf->Output(); ob_end_clean(); ?>
Пробовал ту же концепцию с TCPDF, используя метод ob_clean () перед writeHtml. Такая же ошибка во всех случаях (я могу заверить всех, что это не проблема, связанная с пробелом). Я даже просмотрел файл в шестнадцатеричном формате, чтобы убедиться, что в редактор не вставлены нечетные символы).
Возможная подсказка:
Наконец, я смог понять, что происходит, когда я переместил всю библиотеку mPDF и классы и папки в папку public_html, а не изнутри моей папки приложений (проект symfony). В этом сценарии, когда я указал свой браузер на страницы примеров, он выглядел отлично, без ошибок (и это было очень быстро. Btw). Итак, я знаю, что это работает, и я знаю, что проблема с пробелом или какая-либо другая проблема связана с кодом или установкой (на стороне mPDF / TCPDF). Это заставляет меня поверить, что symfony вставляет какие-то заголовки (которые я пытался удалить с помощью: clearHttpHeaders ()), или есть настройка PHP INI или CONFIG, которую я где-то отсутствовал на сервере PROD.
Кто-нибудь знает, что здесь происходит?
Обновление: сброс потока:
Request URL:http://www.example.com/mpdf Request Method:GET Status Code:200 OK Request Headers GET /mpdf HTTP/1.1 Host: www.example.com Connection: keep-alive Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36 Accept-Encoding: gzip,deflate,sdch Accept-Language: en-US,en;q=0.8 Cookie: __utma=44708724.1463191694.1383759419.1383759419.1383765151.2; __utmz=44708724.1383759419.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); PHPSESSID=9c7c802200b9d8eefe718447755add5f; __utma=1.813547483.1383767260.1385127878.1385130071.38; __utmb=1.7.10.1385130071; __utmc=1; __utmz=1.1383767260.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none) Response Headers Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Connection:Keep-Alive Content-Type:text/html Date:Fri, 22 Nov 2013 14:59:52 GMT Expires:Thu, 19 Nov 1981 08:52:00 GMT Keep-Alive:timeout=5, max=75 Pragma:no-cache Server:Apache Transfer-Encoding:chunked
Ничто не выпрыгивает на меня … никаких других мыслей?
Скорее всего, это маркер спецификации, используйте вашу среду IDE для ее удаления, другое исправление может быть:
<?php $html = "Hello World"; include("../mpdf.php"); ob_clean(); // cleaning the buffer before Output() $mpdf=new mPDF(); $mpdf->WriteHTML($html); $mpdf->Output(); ?>
в<?php $html = "Hello World"; include("../mpdf.php"); ob_clean(); // cleaning the buffer before Output() $mpdf=new mPDF(); $mpdf->WriteHTML($html); $mpdf->Output(); ?>
Это может быть предупреждение от PHP до выхода pdf->. Текст предупреждения отправляется в браузер клиента и, таким образом, файл не может быть отправлен.
Если ваш уровень предупреждения не является одинаковым для DEV и PROD, это может объяснить разницу в поведении.
В моем случае с TCPDF у меня было много предупреждений, таких как «date (), что безопасно полагаться на настройки часового пояса системы …», то ошибка «Некоторые данные уже были выведены в браузер, не могут отправлять PDF».
Добавление функции date_default_timezone_set () в моем исходном коде php позволило устранить предупреждения и ошибку.
У меня такая же проблема, и добавьте эту строку до $ pdf-> output ():
error_reporting(E_ALL);
Затем я обнаружил, что у меня есть спецификация некоторых файлов. И я вижу предупреждение, отправленное в браузер.
Удачи!
С уважением
Может быть, это происходит из-за того, что в результате вашего HTML-кода есть некоторая ошибка для вывода для создания TCPDF …
ИЛИ
Если выше не работает, попробуйте установить Charset как UTF-8 в файле класса TCPDF, это может решить вашу проблему …
Поскольку этот тип ошибок происходил в моем проекте раньше недели назад …
Удалите любой файл, который вы включили бы в начале страницы. В моем случае это был файл, который соединялся с базой данных. Это сработало для меня. (Совет от @ Nicolas400)