简单的问题,可能已被问了一百万次,但我已经搜索过了,并且没有接近这个问题。
我在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/pdf
或image/jpeg
。
有没有人知道为什么文件没有正确打开?
更新
检查了响应标头后,我得到的内容类型为text/html;charset=UTF-8
,而不是根据代码I'设置的application/jpeg
或application/pdf
。使用。我想知道这是否是UserFrosting问题?
答案 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%肯定。