gpt4 book ai didi

php - 对 PHP 的非阻塞 Ajax 请求

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:00:52 24 4
gpt4 key购买 nike

我正在使用 PHP 从远程服务器下载一个(大)文件,此下载是通过单击网页上的下载按钮触发的。

因此,当我单击网页上的下载 按钮时,就会向PHP函数。该函数使用 cURL 触发下载。

与此同时,我想使用 Ajax 向我的 PHP 站点发出其他请求。但是只要下载正在进行,所有其他 Ajax 请求都会显示状态 Pending

所以基本上下载会阻止对 PHP 的所有其他请求。有什么办法可以避免这种阻塞?

最佳答案

这很可能是由于 session 文件被锁定所致。这是许多基于 php 的网络应用程序的一个非常普遍的疏忽。本质上,当您调用session_start() 访问$_SESSION 数组时,它会以读/写模式打开tmp 目录中的 session 文件并锁定该文件以避免潜在的并发问题。如果您从不同的 ajax 请求(或任何 HTTP 请求,例如从新的浏览器窗口)调用另一个脚本,如果第二个请求也调用了 session_start,它将等到 session 文件被解锁之前前进。

修复方法是在您知道不再写入 session 文件后释放 session 文件。由于您的用例是一个巨大的文件下载,因此在数据输出期间您不太可能需要将任何内容推送到 $_SESSION 数组中。您可以通过调用 session_write_close() 将其从写模式中释放出来。

在我发现我经常使用的一个流行的网络应用程序犯了这个罪之前,我不知道是这种情况。关于这个常见瓶颈的一篇很棒的博文是:

http://konrness.com/php5/how-to-prevent-blocking-php-requests/

关于php - 对 PHP 的非阻塞 Ajax 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22282065/

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