标签:php angularjs ajax curl angular-http
我正在使用PHP从远程服务器下载(大)文件,并通过单击网页上的下载按钮触发此下载.
因此,当我单击网页上的下载按钮时,会向PHP函数发出Ajax请求(带有angulars $http).该函数使用cURL触发下载.
与此同时,我想用Ajax向我的PHP站点发出其他请求.但是,只要下载正在进行,所有其他Ajax请求都会显示挂起状态.
所以基本上下载阻止了对PHP的所有其他请求.有什么办法可以避免这种堵塞吗?
解决方法:
这很可能是由于会话文件被锁定.这是许多基于php的网络应用程序的一个非常常见的疏忽.实质上,当您调用session_start()来访问$_SESSION数组时,它会以读/写模式打开tmp目录中的会话文件并锁定此文件以避免潜在的并发问题.如果您从另一个ajax请求(或任何HTTP请求,例如来自新浏览器窗口)调用另一个脚本,如果该第二个请求也调用session_start,它将等待会话文件解锁,然后再继续.
修复是在您知道不再写入会话文件后释放会话文件.由于您的用例是一个巨大的文件下载,因此在数据输出期间您不太可能需要将任何内容推送到$_SESSION数组中.您可以通过调用session_write_close()
将其从写入模式中释放出来
直到我发现一个我经常使用的流行网络应用程序是犯了这个罪行,我才知道情况就是这样.关于这个常见瓶颈的一篇很棒的博文是:
http://konrness.com/php5/how-to-prevent-blocking-php-requests/
标签:php,angularjs,ajax,curl,angular-http 来源: https://codeday.me/bug/20190718/1491311.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。