在PHP提供的浏览器中打开一个文件

时间:2016-06-20 09:29:45

标签: php file browser mime-types userfrosting

简单的问题,可能已被问了一百万次,但我已经搜索过了,并且没有接近这个问题。

我在UserFrosting框架中有一个PHP脚本,通过浏览器向用户提供文件。如果用户选择“打开”文件,我希望在浏览器中打开该文件。下载的内容。

问题是,唯一正确打开的是文本文件。其他任何东西(到目前为止测试的PDF和JPG)只是打开一个ASCII /乱码代码页而不是被解释为PDF或图像。

以下是我使用的代码:

header('Content-Type: '. $mime);
header('Content-Length: ' . filesize($diskname));
header('Content-Disposition: inline; filename=' . $savename);
return readfile($diskname);

$mime是通过函数设置的文件的Mime类型,因此到目前为止我要查看的文件可能是application/pdfimage/jpeg

有没有人知道为什么文件没有正确打开?

更新 检查了响应标头后,我得到的内容类型为text/html;charset=UTF-8,而不是根据代码I'设置的application/jpegapplication/pdf。使用。我想知道这是否是UserFrosting问题?

2 个答案:

答案 0 :(得分:1)

好的,问题解决了。正如我所怀疑的那样,它与UserFrosting框架有关,或者更具体地说,与Slim。

有关

我不应该使用header('Content-Type: image/jpeg');设置标题,而应该执行以下操作:

$this->_app->response->headers->set('Content-Type', $mime);

问题解决了。 :)

答案 1 :(得分:0)

由于我无法评论声誉的原因,即使我不是100%确定这是您的问题,我也必须回答。

问题是,有时PHP文件会导致很多麻烦。

 <--- this little empty line
<?
code goes here
?>
 <--- or this one

标记的空行可能会破坏您的标题。您是否检查了所有文件的空行,这些空行被解释为内容而不是PHP代码?

启用警告也可以帮助解决这个问题。如果在设置标题之前有任何内容,通常会收到一个警告,说明这一点。

我们曾经在公司工作过一次,由于......原因,我们的开发人员花了将近一整天的费用。

编辑:查看您的评论&#34;未声明HTML文档的字符编码。&#34;实际上强调了我的说法。无论如何不是100%肯定。