使用fread()
可以流式传输大文件来强制下载。但是,在流式传输期间,所有的php请求都将被阻塞,直到流式传输完成。如何在流式处理过程中处理传入的requist?
发布于 2015-02-12 02:33:27
如果使用session_start
来利用脚本的会话功能,并且不更改任何默认值,则默认行为是基于文件的会话处理。
文件一次只能由打开的进程打开。因此,如果脚本启动并调用session_start
,那么这个特定的会话文件就会被锁定。如果启动了另一个具有相同会话id的请求,则会暂停对session_start
的下一次调用,直到文件锁可以再次锁定为止。
在正常情况下,这根本不是问题,因为在短时间间隔内很少有具有相同会话id的多个请求,但是如果一个请求执行的时间过长,例如因为它将大量数据传输回调用客户端,那么文件锁就会获得相当长的时间。
幸运的是,在大多数情况下,在执行时甚至不再需要会话,因此可以在脚本结束时更早地关闭会话,并释放文件锁。在此之后,例如可以传输大量数据而不会干扰具有相同会话id的其他请求。
解决这个问题的另一种方法是切换到基于数据库的会话处理。在这种情况下,为了不丢失写入数据,必须花费更多的心思,但通常这是可能的。
https://stackoverflow.com/questions/28429371
复制相似问题