使用fread()
可以流式传输大文件以强行下载。
但是,在流式传输过程中,所有的php请求都将被阻止,直到流式传输结束。如何在流媒体处理过程中处理传入的请求?
答案 0 :(得分:1)
如果使用session_start
来利用脚本的会话功能,并且不更改任何默认值,则默认行为是基于文件的会话处理。
文件一次只能通过打开进程打开。因此,如果脚本已启动并调用session_start
,则会锁定此特定会话文件。如果启动了具有相同会话ID的另一个请求,则暂停对session_start
的下一次调用,直到文件锁可以再次锁定为止。
在正常情况下,这根本不是问题,因为很少有多个请求在短时间间隔内具有相同的会话ID,但是如果一个请求执行异常很长,例如因为它将大量数据传回给调用客户端,所以文件锁定的获取时间相当长。
幸运的是,在大多数情况下,在此时执行时甚至不再需要会话,因此可以在脚本结束时更早地关闭会话,并且正在释放文件锁。在那之后可以例如传输大量数据而不会干扰具有相同会话ID的其他请求。
解决此问题的另一种方法是切换到基于数据库的会话处理。在这种情况下,必须花费更多的想法来避免丢失书面数据,但总的来说这是可能的。