首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >流出大文件时冻结

流出大文件时冻结
EN

Stack Overflow用户
提问于 2015-02-10 18:28:37
回答 1查看 86关注 0票数 3

使用fread()可以流式传输大文件来强制下载。但是,在流式传输期间,所有的php请求都将被阻塞,直到流式传输完成。如何在流式处理过程中处理传入的requist?

EN

回答 1

Stack Overflow用户

发布于 2015-02-12 02:33:27

如果使用session_start来利用脚本的会话功能,并且不更改任何默认值,则默认行为是基于文件的会话处理。

文件一次只能由打开的进程打开。因此,如果脚本启动并调用session_start,那么这个特定的会话文件就会被锁定。如果启动了另一个具有相同会话id的请求,则会暂停对session_start的下一次调用,直到文件锁可以再次锁定为止。

在正常情况下,这根本不是问题,因为在短时间间隔内很少有具有相同会话id的多个请求,但是如果一个请求执行的时间过长,例如因为它将大量数据传输回调用客户端,那么文件锁就会获得相当长的时间。

幸运的是,在大多数情况下,在执行时甚至不再需要会话,因此可以在脚本结束时更早地关闭会话,并释放文件锁。在此之后,例如可以传输大量数据而不会干扰具有相同会话id的其他请求。

解决这个问题的另一种方法是切换到基于数据库的会话处理。在这种情况下,为了不丢失写入数据,必须花费更多的心思,但通常这是可能的。

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

https://stackoverflow.com/questions/28429371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档