问题:
TCPDF和mPDF错误:有些数据已经输出到浏览器,无法发送PDF文件我放弃了尝试修复错误与TCPDF和安装mPDF只得到相同的错误时,试图将文档呈现到浏览器。我可以很好地保存文档,并在检索时将其显示在浏览器中。
此外,这个错误只出现在从我的开发服务器切换到我的主机服务器后。在DEV服务器上工作正常(DEV服务器= WAMPSERVER,PROD服务器= Hostgator Linux)。
故障排除:
我已经阅读了许多关于这个问题的其他讨论在互联网上,我找不到白色相关的问题。我把这项请求归纳为以下内容:
<?php
ob_start();
$html = "Hello World";
include("../mpdf.php");
$mpdf=new mPDF();
$mpdf->WriteHTML($html);
$mpdf->Output();
ob_end_clean();
?>
字符串
在writeHtml之前使用ob_clean()方法对TCPDF尝试了相同的概念。在所有情况下都是同样的错误(我可以向大家保证这不是与白色相关的问题-我甚至用十六进制查看了文件,以确保编辑器没有插入奇怪的字符)。
可能线索:
当我将整个mPDF库、类和文件夹移动到public_html文件夹,而不是从我的应用程序文件夹(一个symfony项目)中移动时,我终于能够得到一个关于发生了什么的线索。在这种情况下,当我将浏览器指向示例页面时,它呈现得很好,没有任何错误(顺便说一句,它是超级快的)。所以,我知道它可以工作,并且我知道关于代码或安装(在mPDF/TCPDF方面)没有与空白相关的问题或任何其他相关问题。这让我相信symfony正在插入某种类型的标题(我试图使用以下命令删除:clearHttpHeaders()),或者在PROD服务器上的某个地方缺少PHP INI或CONFIG设置。
有人知道这里发生了什么吗?
**更新:**流转储:
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
型
我什么都不知道……还有别的想法吗
8条答案
按热度按时间agxfikkp1#
最有可能是BOM标记,使用IDE删除它,其他热修复程序可以是:
字符串
jobtbby32#
我也犯了同样的错误。
使用
ob_start();
和ob_end_clean();
解决此问题PHP是一种解释性语言,因此每个语句都是一个接一个地执行的,因此PHP倾向于将HTML分块发送到浏览器,从而降低了性能。使用输出缓冲,生成的HTML被存储在缓冲区或字符串变量中,并被发送到缓冲区,以便在PHP脚本中的最后一条语句执行后呈现。
但默认情况下不启用输出缓冲。为了启用输出缓冲,必须在回显脚本中的任何HTML内容之前使用ob_start()函数。
[参考信贷][1]
[PHP |ob_start()函数][2]
字符串
以便在处理mPDF之前清除所有缓冲输出。
祝你好运[1]:https://www.geeksforgeeks.org/php-ob_start-function/ [2]:https://www.php.net/manual/en/function.ob-start.php的
8yoxcaq73#
这可能是PHP在输出pdf->之前发出的一些警告。警告文本将发送到客户端的浏览器,因此无法发送文件。
如果DEV和PROD的警告级别不相同,这可以解释行为的差异。
在我的情况下,使用TCPDF,我有许多警告,如“date()依赖系统的时区设置不安全......”,然后错误“一些数据已经输出到浏览器,无法发送PDF”。
在我的php源代码中添加函数date_default_timezone_set()解决了警告和错误。
plupiseo4#
我也有同样的问题,在$pdf->output()之前添加这一行:
字符串
然后我发现我有BOM的一些文件。我看到一条警告消息发送到浏览器。
祝你好运!
问候
kpbpu0085#
可能是因为在你的HTML代码的结果中有一些错误输出到创建TCPDF...
或
如果上面没有工作,请尝试在TCPDF的类文件中将字符集设置为UTF-8,可能会解决您的问题...
因为这种类型的错误是发生在我的项目前一周...
vaqhlq816#
删除本应包含在页面开头的任何文件。在我的情况下,它是一个文件,与数据库连接。对我很有效。(@Nicolas400)
ubbxdtey7#
在
include("../mpdf.php");
之前尝试使用ob_clean();
。qfe3c7zg8#
我也犯了同样的错误。
字符串
这意味着在使用mPDF创建PDF之前,一些数据存储在缓冲区中,并发送到浏览器。因此无法创建PDF。
就这么做。在你准备pdf数据的页面的第一行添加这个php内置函数。
型
并在mPDF代码之前(在您调用mpdf的地方之前)将此添加到php内置函数下面
型
以便在处理mPDF之前清除所有缓冲区输出。