1

一个简单的问题,可能被问了一百万次,但我已经搜索过了,离让这个工作更近了一步。

我在 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而不是application/jpeg或者application/pdf它应该根据我使用的代码设置为。我想知道这是否是 UserFrosting 问题?

4

2 回答 2

1

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

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

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

问题解决了。:)

于 2016-06-20T10:59:34.007 回答
0

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

问题是,有时 PHP 文件会引起很多麻烦。

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

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

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

我们公司曾经遇到过这种情况,我们的 3 名开发人员花了将近一整天的时间才能找到,因为……原因。

编辑:看到您的评论“未声明 HTML 文档的字符编码”。实际上强调了我的声明。无论如何,不​​是100%肯定。

于 2016-06-20T09:57:14.563 回答