使用fread()
可以流式传输大文件以强制下载。 但是,在流式传输过程中,所有的php请求都会被阻塞,直到流式传输完成。如何在流式传输过程中处理传入的请求?冻结期间流出大文件
2
A
回答
1
如果使用session_start
来利用脚本的会话功能并且不会更改任何默认值,那么缺省行为是基于文件的会话处理。
文件一次只能通过打开进程打开。因此,如果脚本启动并呼叫session_start
,则该特定会话文件被锁定。如果具有相同会话ID的另一个请求启动,则下一个对session_start
的调用将暂停,直到文件锁再次被锁定为空。
在正常情况下,这完全没有问题,因为在很短的时间间隔内很少有多个具有相同会话ID的请求,但是如果一个请求执行异常长的例如因为它将大量数据传输回调用客户端,因此获取文件锁的时间相当长。
幸运的是,在大多数情况下,在此次执行时甚至不再需要会话,因此可以在脚本结束时尽早关闭会话,并释放文件锁定。之后,可以例如传输大量数据而不干扰具有相同会话ID的其他请求。
另一种解决此问题的方法是切换到基于数据库的会话处理。在这种情况下,必须花更多的心思来不丢失书面数据,但总的来说这是可能的。
相关问题
- 1. 在AsyncTask期间UI冻结
- 2. Maya GUI在子流程调用期间冻结
- 3. 在文件打开期间冻结Python函数
- 4. 文件打开期间/之后偶尔会冻结数据导出窗口
- 5. Parallel.ForEach在最终迭代期间冻结
- 6. Kohana 3.2冻结流视频
- 7. Jmeter在加载大型结果文件(.csv)时冻结
- 8. 将CNN张量流模型冻结为.pb文件
- 9. NSIS安装程序运行期间的文件下载在“连接”处冻结
- 10. 你能选择什么文件冻结瓶冻结?
- 11. 冻结大教堂操纵
- 12. 在大文件上传期间,Firefox全部冻结; Ajax进度条不可行; IE6正常工作
- 13. 从S3流出一个大文件行
- 14. 流出大数据表excel文件
- 15. 骡流在一定时期内会冻结
- 16. Ruby:流式传输大型AWS S3对象冻结
- 17. Unity Admob插件 - Androidmanifest - 冻结退出
- 18. SSRS导出冻结,条件格式
- 19. TextMate冻结试图打开一个大文件
- 20. C#.Net在遍历大量文件时冻结
- 21. 在FreeBSD下的c/C++下复制大文件冻结系统
- 22. 下载大文件:: readAll冻结几秒钟
- 23. PyQt4,QThread并打开大文件而不冻结GUI
- 24. git克隆项目与大文件冻结
- 25. 上传大文件用POST冻结系统
- 26. 网站正在冻结,而在php下载大文件
- 27. SSH2.SFTP node.js备份脚本与大文件冻结
- 28. 尝试读取和解码大文件时C#GUI冻结
- 29. 在解析JSON数据期间在UITableView中滚动期间冻结
- 30. ClientAbortException:在大文件上传期间出现java.io.IOException
你使用的是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