- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编辑 2:问题没有解决;我通过切换到使用 ezpdf 而不是 TCPDF 的旧版本文件找到了解决方法,并对其进行了更改以获得所需的打印输出(我不知道为什么整个网站中只有一个页面更改为 TCPDF,但显然它发生了)。我仍然想知道是否有解决此问题的方法,因为 TCPDF 的代码在运行 php 5.2 的服务器上运行正常,但在新服务器上运行不正常。但是,它不再是主要优先事项。
提交 PDF 请求后,我什么也没得到;只是一个空白页。这是从另一台服务器获取的所有代码(我们正在将 php 版本更新到 5.3)并且代码在第一台服务器上运行良好。
Warning: Cannot modify header information - headers already sent (output started at filepath in path/tcpdf.php) TCPDF ERROR: Some data has already been output to browser, can't send PDF file
经过一些调试,我注意到问题是“headers already sent error”,我在更新此站点时遇到过几次。大多数这些错误都可以使用 meta http-equiv
修复,因为它们大多只是页面刷新。但是,TCPDF 使用 header 制作 PDF 文件并强制下载。
如何在不需要 header 的情况下使案例“D”正常工作,如果无法完成,是否可以将案例“I”改为在没有 header 的情况下工作?
我尝试在 $pdf->output()
之前使用 ob_clean()
。我还尝试删除 require_once('./common/tcpdf/config/lang/eng.php')
。这两个都对其他人有固定的问题,我已经广泛研究了这个话题。我不认为它在这种情况下会起作用,因为我知道该网站此时已经开始输出。
我想要的是在下面的代码中使用 header (meta http-equiv?)的替代方法,以防出现“D”(首选)或“I”(可行),这将给我相同的结果(pdf下载或在新选项卡或窗口中打开 pdf)。当然,除非有另一种修复方法。如果没有,我将不得不在不使用 TCPDF 的情况下重新编写页面。
编辑:在原始服务器上,“生成 pdf”会导致页面重新加载,然后在长时间等待(查询数据库时)后,它会强制用户下载。在新服务器上,页面被重新加载,等待查询的时间很长,然后菜单实际上中断了(注销被删除,另一个按钮被移到菜单栏其余部分的下方)并且没有其他任何事情发生。
取自 tcpdf.php 的代码:
case 'I': {
// Send PDF to the standard output
echo "<script>console.log('some log');</script>";
if (ob_get_contents()) {
$this->Error('Some data has already been output, can\'t send PDF file');
}
if (php_sapi_name() != 'cli') {
//We send to a browser
header('Content-Type: application/pdf');
if (headers_sent()) {
$this->Error('Some data has already been output to browser, can\'t send PDF file');
}
header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1
header('Pragma: public');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Content-Length: '.$this->bufferlen);
header('Content-Disposition: inline; filename="'.basename($name).'";');
}
echo $this->getBuffer();
break;
}
case 'D': {
// Download PDF as file
if (ob_get_contents()) {
$this->Error('Some data has already been output, can\'t send PDF file');
}
header('Content-Description: File Transfer');
if (headers_sent()) {
$this->Error('Some data has already been output to browser, can\'t send PDF file');
}
header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1
header('Pragma: public');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
// force download dialog
header('Content-Type: application/force-download');
header('Content-Type: application/octet-stream', false);
header('Content-Type: application/download', false);
header('Content-Type: application/pdf', false);
// use the Content-Disposition header to supply a recommended filename
header('Content-Disposition: attachment; filename="'.basename($name).'";');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.$this->bufferlen);
echo $this->getBuffer();
break;
}
最佳答案
我在网上看到很多关于使用 ob_start() 的引用,在文件末尾使用 ob_end_flush()。也许这在某些情况下有效,尽管我真的不明白它会如何。不反对 - 只是说我不明白,而且我没有找到解决问题的办法。
但是,我发现在文件顶部使用 ob_start() 并在输出之前使用 ob_end_clean() 应该可以解决问题。
<?PHP
ob_start();
// All other content
ob_end_clean();
$pdf->Output('MyPDF_File.pdf', 'D');
?>
关于php - 使用 TCPDF 获取 'Headers already sent',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24068529/
我在 JavaScript 文件中运行 PHP,例如...... var = '';). 我需要使用 JavaScript 来扫描字符串中的 PHP 定界符(打开和关闭 PHP 的 )。 我已经知道使
我希望能够做这样的事情: php --determine-oldest-supported-php-version test.php 并得到这个输出: 7.2 也就是说,php 二进制检查 test.
我正在开发一个目前不使用任何框架的大型 php 站点。我的大问题是,随着时间的推移慢慢尝试将框架融入应用程序是否可取,例如在创建的新部件和更新的旧部件中? 比如所有的页面都是直接通过url服务的,有几
下面是我的源代码,我想在同一页面顶部的另一个 php 脚本中使用位于底部 php 脚本的变量 $r1。我需要一个简单的解决方案来解决这个问题。我想在代码中存在的更新查询中使用该变量。 $name)
我正在制作一个网站,根据不同的情况进行大量 PHP 重定向。就像这样...... header("Location: somesite.com/redirectedpage.php"); 为了安全起见
我有一个旧网站,我的 php 标签从 因为短标签已经显示出安全问题,并且在未来的版本中将不被支持。 关于php - 如何避免在 php 文件中写入
我有一个用 PHP 编写的配置文件,如下所示, 所以我想用PHP开发一个接口(interface),它可以编辑文件值,如$WEBPATH , $ACCOUNTPATH和 const值(value)观
我试图制作一个登录页面来学习基本的PHP,首先我希望我的独立PHP文件存储HTML文件的输入(带有表单),但是当我按下按钮时(触发POST到PHP脚本) )我一直收到令人不愉快的错误。 我已经搜索了S
我正在寻找一种让 PHP 以一种形式打印任意数组的方法,我可以将该数组作为赋值包含在我的(测试)代码中。 print_r 产生例如: Array ( [0] => qsr-part:1285 [1]
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: What is the max key size for an array in PHP? 正如标题所说,我想知道
我正在寻找一种让 PHP 以一种形式打印任意数组的方法,我可以将该数组作为赋值包含在我的(测试)代码中。 print_r 产生例如: Array ( [0] => qsr-part:1285 [1]
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我在 MySQL 数据库中有一个表,其中存储餐厅在每个工作日和时段提供的菜单。 表结构如下: i_type i_name i_cost i_day i_start i_
我有两页。 test1.php 和 test2.php。 我想做的就是在 test1.php 上点击提交,并将 test2.php 显示在 div 中。这实际上工作正常,但我需要向 test2.php
我得到了这个代码。我想通过textarea更新mysql。我在textarea中回显我的MySQL,但我不知道如何更新它,我应该把所有东西都放进去吗,因为_GET模式没有给我任何东西,我也尝试_GET
首先,我是 php 的新手,所以我仍在努力学习。我在 Wordpress 上创建了一个表单,我想将值插入一个表(data_test 表,我已经管理了),然后从 data_test 表中获取所有列(id
我有以下函数可以清理用户或网址的输入: function SanitizeString($var) { $var=stripslashes($var); $va
我有一个 html 页面,它使用 php 文件查询数据库,然后让用户登录,否则拒绝访问。我遇到的问题是它只是重定向到 php 文件的 url,并且从不对发生的事情提供反馈。这是我第一次使用 html、
我有一个页面充满了指向 pdf 的链接,我想跟踪哪些链接被单击。我以为我可以做如下的事情,但遇到了问题: query($sql); if($result){
我正在使用 从外部文本文件加载 HTML/PHP 代码 $f = fopen($filename, "r"); while ($line = fgets($f, 4096)) { print $l
我是一名优秀的程序员,十分优秀!