-1

我有一个名为 newdesign.pdf 的 pdf 文件,我使用下面的代码来提供它。在我自己的机器上很好,但是当我在服务器上时,问题是浏览器没有打开 PDF 文件,而是显示所有乱码的 PDF 源文本。

这是我的代码:

header('Content-Description: File Transfer');
header('Content-Type: application/pdf');
header('Content-Length: ' . filesize("newdesign.pdf"));
// to open in browser
header('Content-Disposition: inline; filename=' . basename("newdesign.pdf"));
readfile("newdesign.pdf");

这是输出的开始:

Warning: Cannot modify header information - headers already sent by (output started at /home/zeejfl5/public_html/ui_test/savedesign.php:8) in /home/zeejfl5/public_html/ui_test/savedesign.php on line 71
%PDF-1.4 1 0 obj << /Title (��) /Creator (��) /Producer (��wkhtmltopdf) /CreationDate (D:20120903012618-07'00') >> endobj 3 0 obj << /Type /ExtGState /SA true /SM 0.02 /ca 1.0 /CA 1.0 /AIS false /SMask /None>> endobj 4 0 obj [/Pattern /DeviceRGB] endobj
 8 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 5 0 obj << /Type /Page /Parent 2 0 R /Contents 9 0 R /Resources 11 0 R /Annots 12 0 R /MediaBox [0 0 454 227] >> 
endobj 11 0 obj << /ColorSpace << /PCSp 4 0 R /CSp /DeviceRGB /CSpg /DeviceGray >> /ExtGState << /GSa 3 0 R >> /Pattern << >> /Font << /F6 6 0 R /F7 7 0 R >> /XObject << >> >> endobj 12 0 obj [ ] endobj 9 0 obj << /Length 10 0 R /Filter /FlateDecode 
>> stream x��[M��0��W̹`E}YPzhh=B=�J�۲$K�=��wl'Y9�d74�F��$��4�����������t��v:J*���[5,Vb k13�m۵�

如果您使用 Adob​​e Reader 打开,我的 PDF 文件本身很好。但是如何在浏览器中打开供用户查看呢?我认为代码没有任何问题,因为它在我的本地机器上运行良好。它仅在我将脚本上传到服务器时才起作用。

4

2 回答 2

1

如果在发送标头之前没有回显,请检查您的 php 文件。如果在标头之前将任何数据发送到浏览器,则标头是无用的。

于 2012-09-03T08:34:17.170 回答
0

PHP 呈现此错误消息是因为在 PDF 文件之前的页面中至少回显了 1 个字符。在您的情况下,您没有echo在页面上显式地编辑某些内容,但是 PHP 引擎有。

PHP 在本地和服务器上的设置方式有所不同。
看起来好像您的服务器error_reporting在其php.ini文件中定义了更严格的级别。

(关于这个主题的更多信息:http ://www.php.net/manual/en/errorfunc.configuration.php#ini.display-errors )

您可以通过完全禁用 PHP 警告来解决这个问题:
<?php ini_set('display_errors', 0); ?>
但这不是一个长期的解决方案。

要一劳永逸地解决此问题,请检查第8行和第71/home/zeejfl5/public_html/ui_test/savedesign.php以确定 PHP 引擎在何处抛出该警告。

于 2012-09-03T09:56:16.570 回答