首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >php下载行为不一致

php下载行为不一致
EN

Stack Overflow用户
提问于 2014-02-11 04:44:04
回答 1查看 45关注 0票数 0

我在这里有一个小的下载脚本设置,它有时工作得很好。我已经缩小了问题的范围,在大多数情况下只发送响应头,当它们不发送时,发生的是它要求我下载文件,除了它在磁盘上的名称之外没有任何信息,并且它被下载为'application/octet-stream‘。以下是我要发送的标头

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename="'.$file->logical_name.'"');
header('Content-Type: "'.$mime.'"');
header("Content-Length: ".filesize($this->file));
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Pragma: no-cache');
readfile($this->file);  

所以,为了清楚我的问题,文件信息只是偶尔发送,当他们不发送时,我得到了我的问题,这不是关于正在发送的文件的信息,因此它作为一个奇怪的名称(如磁盘上的) 'application/octet-stream‘下载

更新

对于小于100kb的较小文件,不会出现这种情况

EN

回答 1

Stack Overflow用户

发布于 2014-02-11 06:32:06

在读取文件之前刷新所有输出解决了这个问题。似乎关键是确保所有这些头文件在输入下载文件之前都已实际发送(使用readfile()读取文件)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename="'.$file->logical_name.'"');
header('Content-Type: "'.$mime.'"');
header('Content-Length:'.filesize($this->file));
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Pragma: no-cache');
flush();
readfile($this->file);

添加flush()函数解决了这个问题。注意,我没有使用ob_start启动一个缓冲区,所以我没有使用ob_flush,但是在你这样做的情况下,可能会这样做

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21693311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文