PHP中的内容处理头集不适用于Firefox

PHP中的内容处理头集不适用于Firefox,php,apache,pdf,mime-types,content-disposition,Php,Apache,Pdf,Mime Types,Content Disposition,我有一个表单按钮,它将数据提交到通用脚本(加载表单的同一页,index.php),如果将正确的POST变量提交到该脚本,它将返回一个PDF供用户打印(加载了相关表单信息和其他DB信息等) 问题是,无论我在标题中设置了什么内容类型和内容配置,Firefox都会提示用户保存或打开文档 如果Firefox提供自己的AdobeReader插件作为“Open With”(打开方式)选项,但它只提供实际的AdobeReader应用程序(由于身份验证和默认浏览器设置超出我的控制等原因,这会导致问题),那么这也

我有一个表单按钮,它将数据提交到通用脚本(加载表单的同一页,index.php),如果将正确的POST变量提交到该脚本,它将返回一个PDF供用户打印(加载了相关表单信息和其他DB信息等)

问题是,无论我在标题中设置了什么内容类型和内容配置,Firefox都会提示用户保存或打开文档

如果Firefox提供自己的AdobeReader插件作为“Open With”(打开方式)选项,但它只提供实际的AdobeReader应用程序(由于身份验证和默认浏览器设置超出我的控制等原因,这会导致问题),那么这也不会太糟糕

那么,在服务器端我是否需要更改一些内容(在.htaccess文件或实际的头文件中),让Firefox获得这样一条消息:响应是一个带有application/PDF MIME类型的PDF文件,因此应该将该文件视为指向PDF的硬链接,而不是服务器生成的流

最后一件事

如果我将内容配置设置为“inline”,Firefox将在Firefox中打开该文件,但只有在首先将页面加载为“index.php”之前。一旦用户访问PDF,如果他们尝试单击“后退”按钮,就会点击加载PDF的index.php,而不是他们提交数据的index.php。在Mac方面,Firefox不会加载PDF,而是会提示用户保存或打开“index.php”,就像它是一个附件一样

谢谢


当前我尝试的代码(按此顺序):

这一个被视为文件附件,因此文件扩展名规则忽略了Firefox的Mime类型规则: 这一个可以工作,但是首先加载
index.php
,然后加载文件,这是不吸引人的、令人困惑的,并且在pdf和原始页面之间放置了一个额外的请求(以及一个额外的页面): 这一个与
附件
(在Firefox中)相同,因此只提示在Adobe Reader中保存或打开,而不是默认为Adobe Reader插件: 还要注意,在上一个示例中,我尝试了
pdf
application\pdf
作为内容配置。没有区别


我唯一还没有尝试的是将类型设置为ocet/stream。我会交叉我的手指,但不会屏住呼吸。

我想Firefox很难将PDF作为对帖子的回应,你能尝试生成一个指向PDF的链接并让他们点击链接吗,该链接可以包含诸如blah.php?VAR=123之类的GET变量,因此您仍然可以动态生成PDF。

mime类型
应用程序/octet流应强制浏览器下载它。我不知道这是否是你想从你的帖子中得到的。你可以尝试将链接以“.pdf”结尾,并使用类似mod_rewrite的东西将其映射到你的PHP脚本

你能将header()语句添加到问题中吗?这将有助于查看实际使用的代码;不同的是,答案可能只是一般性的,而不是针对您的情况。您找到解决方案了吗?我也一样problem@Quamis-我已经有一段时间没有参与那个项目了,但我记得,最终使用mod_rewrite是唯一的解决方案。我不知道这是否有关系,但当时的另一个问题是,我的一半用户已经升级到雪豹(Snow Leopard,OSX),这是Mac的第一个原生64位操作系统,他们的Firefox版本是64位的,但Adobe尚未发布Firefox的64位插件,因此它迫使应用程序在预览或其他默认PDF查看器中打开。我认为我探索的另一个解决方案是一种原始的Web打印形式(因为它是一个办公室,一台高科技打印机)。对不起。我认为我有一个问题。我希望它将其视为指向静态PDF的链接,这意味着如果用户将其设置为使用PDF阅读器插件打开(而不是提供保存对话框),PDF将被打开。现在它把它当作是下载而已。我刚在我的沙箱里试过,它看起来确实很有希望。我真的很犹豫,因为这打开了一个安全漏洞,因为它增加了另一层(因为没有更好的词)关于文件如何实际生成的秘密。但它确实奏效了,谢谢+1用于解决方法。如果不建议更简单的解决方案,我会把它作为答案。
    header("Content-Type: application/pdf");
    header('Content-Disposition:attachment; filename="testing.pdf"');
    header("Content-Type: application/pdf");
    header('Content-Disposition:inline; filename="testing.pdf"');
    header("Content-Type: application/pdf");
    header('Content-Disposition:pdf; filename="testing.pdf"');