在 PHP 提供的浏览器中打开文件
Open a file in the browser served from PHP
一个简单的问题,可能被问过一百万次,但我已经搜索过了,但离让它起作用还差得很远。
我在 UserFrosting 框架中有一个 PHP 脚本,它通过浏览器向用户提供文件。如果他们 select 'Open' 而不是下载,我希望文件在他们的浏览器中打开。
问题是,唯一能正常打开的是文本文件。其他任何内容(目前测试过的 PDF 和 JPG)都只是作为 ASCII/garbled 代码的页面打开,而不是被解释为 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
。
有谁知道文件无法正常打开的原因吗?
更新
检查响应 headers 后,我得到的内容类型是 text/html;charset=UTF-8
而不是 application/jpeg
或 application/pdf
,它应该根据我的代码设置为我正在使用。我想知道这是否是 UserFrosting 问题?
由于我无法评论声誉的原因,我必须回答,即使我不是 100% 确定这是你的问题。
问题是,有时 PHP-files 会引起很多麻烦。
<--- this little empty line
<?
code goes here
?>
<--- or this one
标记的空行会毁了你的header。您是否检查了所有文件中的空行,这些空行被解释为内容而不是 PHP-Code?
启用警告也可以帮助解决这个问题。如果在设置 headers 之前有任何内容,您通常会收到一条警告,其中准确说明了这一点。
我们公司曾经有过这个,我们的 3 个开发人员花了将近一整天的时间才找到它,因为...原因。
编辑: 看到您的评论 "The character encoding of the HTML document was not declared." 实际上强调了我的陈述。无论如何,不是 100% 确定。
好的,问题解决了。正如我所怀疑的那样,它与 UserFrosting 框架有关,或者更具体地说,与 Slim 有关。
而不是使用 header('Content-Type: image/jpeg');
设置 headers,我应该这样做:
$this->_app->response->headers->set('Content-Type', $mime);
问题已解决。 :)
一个简单的问题,可能被问过一百万次,但我已经搜索过了,但离让它起作用还差得很远。
我在 UserFrosting 框架中有一个 PHP 脚本,它通过浏览器向用户提供文件。如果他们 select 'Open' 而不是下载,我希望文件在他们的浏览器中打开。
问题是,唯一能正常打开的是文本文件。其他任何内容(目前测试过的 PDF 和 JPG)都只是作为 ASCII/garbled 代码的页面打开,而不是被解释为 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
。
有谁知道文件无法正常打开的原因吗?
更新
检查响应 headers 后,我得到的内容类型是 text/html;charset=UTF-8
而不是 application/jpeg
或 application/pdf
,它应该根据我的代码设置为我正在使用。我想知道这是否是 UserFrosting 问题?
由于我无法评论声誉的原因,我必须回答,即使我不是 100% 确定这是你的问题。
问题是,有时 PHP-files 会引起很多麻烦。
<--- this little empty line
<?
code goes here
?>
<--- or this one
标记的空行会毁了你的header。您是否检查了所有文件中的空行,这些空行被解释为内容而不是 PHP-Code?
启用警告也可以帮助解决这个问题。如果在设置 headers 之前有任何内容,您通常会收到一条警告,其中准确说明了这一点。
我们公司曾经有过这个,我们的 3 个开发人员花了将近一整天的时间才找到它,因为...原因。
编辑: 看到您的评论 "The character encoding of the HTML document was not declared." 实际上强调了我的陈述。无论如何,不是 100% 确定。
好的,问题解决了。正如我所怀疑的那样,它与 UserFrosting 框架有关,或者更具体地说,与 Slim 有关。
而不是使用 header('Content-Type: image/jpeg');
设置 headers,我应该这样做:
$this->_app->response->headers->set('Content-Type', $mime);
问题已解决。 :)