带有PDF和PHP的Apache2-“此文件不是以“%PDF-”开头

数周以来,我一直在尝试寻找此错误的原因-我空白了.系统使用PHP生成动态.pdf文件.

我有三台服务器:Dev(带有Apache2的Win7),Test(带有nginx的Ubuntu 10.4)和Live(带有nginx的Ubuntu 10.10).所有人都在运行php5和我开发的系统-相同的代码.等效,相同的配置.

我已经测试了许多浏览器:DevIE(win7,IE8),DevFF(Win7 Firefox 3.5),DevSaf(win,Safari),LaptopFF(WinXP,Firfox 3.5),笔记本电脑IE(WinXP,IE8 Test(Ubuntu FF3). 5)和用户(主要是Win 7和Win XP上的IE8).

>当我从“测试”生成PDF时,它在所有浏览器中都能正常工作(除了我无法测试的用户).
>当我从Dev生成PDF时,它在DevIE,DevFF和DevSaf中失败,但是从Test调用它时失败.
> Apache2总是在同一台机器上失败.
>在笔记本电脑上,使用FF成功,而使用IE8失败(请参见下文).

用户正在报告间歇性问题.它失败,然后重复请求并成功.

当失败….

显示生成的PDF的日志,发送正确的大小回复(500KB至1.8MB),结果为200 OK.有时约10秒后,重复相同的URL-但这会生成登录屏幕(再次返回200 OK),但大小只有2K.这意味着它是在没有cookie的情况下被请求的.

Adobe Reader尝试显示登录页面,并不可避免地出现“此文件未以“%PDF-”开头”错误消息.

除了当我尝试使用笔记本电脑和IE8时-然后显示源显示空行的4行html文件时,显示源失败!

该系统已经运行了一年多-大约2个月前才因更换生产服务器而开始出现故障.测试版本此时未更改,但也开始失败.

我已经尝试过各种头文件,但是我尝试过的一切都没有任何区别.当前的标题集是:

header('Content-Disposition: inline; filename="'.$this->pdfFilename().'"');
header('Content-type: application/pdf');
header("Pragma: public");
$when = date('r',time()+20);  // expire in 20 seconds
header("Expires: $when");

我尝试用附件替换内联.添加和删​​除各种无缓存头.一切都无济于事.

通过JavaScript在新窗口中请求PDF,然后8秒钟后进行刷新.我已经测试过,没有新窗口,也没有刷新-没有变化.

我有一些由开发服务器提供的(小)PDF.因此,我提出了我能想到的所有限制.现在,它总是失败.

因此,我有一台Windows Apache2.2服务器,当从同一台计算机浏览时失败,而从Firefox中的其他计算机浏览时成功.

除了浏览器外,没有涉及代理或缓存机制.

有谁对出什么问题有任何想法吗?就像我说的那样,我已经进行了将近4周的测试和排除,无论是断断续续的,甚至还没有发现故障的组件.

最佳答案
这真的很难解决-对于初学者,(请原谅我的直言,但是)这是管道不应该是什么样的一个典型示例:

>三种不同的操作系统.
>可能至少有两个不同版本的PHP.
>两个不同的Web服务器.

但是无论如何,有关调试PHP的一些一般性提示:

>确保在php.ini中启用error_log和log_errors(设置display_errors = Off)
>使用最冗长的error_reporting
>在Nginx中设置access_log和error_log.
>在nginx中提高日志级别(我猜您使用php-cgi或php-fpm,因此您应该能够看到下载attemp失败时后端发出的状态).

此外:

>您尚未共享PDF的生成方式-您确定此处使用的所有库在所有系统中都是相同的,或至少在某种程度上是相同的吗?
>在任何情况下,请确保我将PDF保存在提供下载的文件之前.这使您可以对实际文件进行故障排除-查看PDF生成是否确实有效.
>由于您要保存PDF,因此我会考虑将其放在公共文件夹中,以便可以查看生成后是否可以直接重定向到它.而且只有在这种方法可行的情况下,我才能进行强制下载.
>我将在所有阶段复制生产环境. ;-)您需要开发服务器完全类似于生产环境.对于您自己的工作站,我建议您使用VM(例如,通过带有Ubuntu 10.10的Virtualbox).

让我知道这可以带您到某个地方,然后回复更新.

相关文章

文章浏览阅读3.7k次,点赞2次,收藏5次。Nginx学习笔记一、N...
文章浏览阅读1.7w次,点赞14次,收藏61次。我们在使用容器的...
文章浏览阅读1.4k次。当用户在访问网站的过程中遇到404错误时...
文章浏览阅读2.7k次。docker 和 docker-compose 部署 nginx+...
文章浏览阅读1.3k次。5:再次启动nginx,可以正常启动,可以...
文章浏览阅读3.1w次,点赞105次,收藏182次。高性能:Nginx ...