使用fread()
可以流式传输大文件以强制下载。 但是,在流式传输过程中,所有的php请求都会被阻塞,直到流式传输完成。如何在流式传输过程中处理传入的请求?冻结期间流出大文件
2
A
回答
1
如果使用session_start
来利用脚本的会话功能并且不会更改任何默认值,那么缺省行为是基于文件的会话处理。
文件一次只能通过打开进程打开。因此,如果脚本启动并呼叫session_start
,则该特定会话文件被锁定。如果具有相同会话ID的另一个请求启动,则下一个对session_start
的调用将暂停,直到文件锁再次被锁定为空。
在正常情况下,这完全没有问题,因为在很短的时间间隔内很少有多个具有相同会话ID的请求,但是如果一个请求执行异常长的例如因为它将大量数据传输回调用客户端,因此获取文件锁的时间相当长。
幸运的是,在大多数情况下,在此次执行时甚至不再需要会话,因此可以在脚本结束时尽早关闭会话,并释放文件锁定。之后,可以例如传输大量数据而不干扰具有相同会话ID的其他请求。
另一种解决此问题的方法是切换到基于数据库的会话处理。在这种情况下,必须花更多的心思来不丢失书面数据,但总的来说这是可能的。
相关问题
- 1. Maya GUI在子流程调用期间冻结
- 2. Parallel.ForEach在最终迭代期间冻结
- 3. Kohana 3.2冻结流视频
- 4. Jmeter在加载大型结果文件(.csv)时冻结
- 5. 将CNN张量流模型冻结为.pb文件
- 6. 你能选择什么文件冻结瓶冻结?
- 7. 冻结大教堂操纵
- 8. 在大文件上传期间,Firefox全部冻结; Ajax进度条不可行; IE6正常工作
- 9. 骡流在一定时期内会冻结
- 10. Unity Admob插件 - Androidmanifest - 冻结退出
- 11. SSRS导出冻结,条件格式
- 12. Ruby:流式传输大型AWS S3对象冻结
- 13. PyQt4,QThread并打开大文件而不冻结GUI
- 14. C#.Net在遍历大量文件时冻结
- 15. 尝试读取和解码大文件时C#GUI冻结
- 16. git克隆项目与大文件冻结
- 17. 下载大文件:: readAll冻结几秒钟
- 18. 在FreeBSD下的c/C++下复制大文件冻结系统
- 19. 在解析JSON数据期间在UITableView中滚动期间冻结
- 20. 流利NHIbernate冻结了很多
- 21. 启动批处理流时C#冻结
- 22. C#Wav文件播放冻结GUI
- 23. 设备冻结,同时删除文件
- 24. FileHelper读取csv文件冻结
- 25. Django pip冻结导致空文件
- 26. GitHub Enterprise:在发布期间强制执行代码冻结?
- 27. ASP .NET MVC在新项目创建期间冻结Visual Studio
- 28. IE6/7在jQuery AJAX请求期间冻结
- 29. 部署到Heroku:在写入对象期间冻结
- 30. 相机在通话期间打开应用程序时冻结
你使用的是Apache吗?如果是这样,请查看大文件的mod_xsendfile:https://tn123.org/mod_xsendfile/ – 2015-02-10 10:30:57
您的意思是说,如果流在'streaming.php'上运行,并且我调用'anotherpage.php',则后者将不会运行流式传输结束了吗? – 2015-02-10 10:31:40
在fread之前调用'session_write_close'。 – GhostGambler 2015-02-10 10:53:59