gpt4 book ai didi

php - 流出大文件时卡住

转载 作者:行者123 更新时间:2023-12-04 18:05:12 26 4
gpt4 key购买 nike

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

最佳答案

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

文件一次只能由打开的进程打开。因此,如果启动脚本并调用 session_start,则此特定 session 文件将被锁定。如果启动了另一个具有相同 session ID 的请求,则将暂停对 session_start 的下一次调用,直到文件锁空闲以再次锁定。

在正常情况下这完全没有问题,因为在很短的时间间隔内很少有多个请求具有相同的 session id,但是如果一个请求执行的时间异常长 e.g.因为它会将大量数据传输回调用客户端,所以文件锁的获取时间相当长。

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

解决此问题的另一种方法是切换到基于数据库的 session 处理。在这种情况下必须多花些心思才能不丢失写入的数据,但总的来说这是可能的。

关于php - 流出大文件时卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28429371/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com