如果正在进行流式下载,Nginx PHP-FPM无法提供请求
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果正在进行流式下载,Nginx PHP-FPM无法提供请求相关的知识,希望对你有一定的参考价值。
在nginx上安装了两个应用程序,一个是php,另一个是Python。
基于Python的应用程序是使用uwsgi在Nginx上部署的REST API应用程序。一个API提供CSV下载。 CSV文件大多数大于100 MB。因此API提供流式下载。
使用php-fpm在同一个Nginx上托管的PHP应用程序使用REST API。在CSV下载的情况下,PHP应用程序向API发出请求并提供流式下载以进一步流式下载到用户/浏览器。这件事情很好。
现在问题是当PHP应用程序正在进行下载请求并尝试访问php应用程序的其他页面时,它不会加载(响应)页面。如果我取消下载请求,则立即加载/响应页面。
在API中,如果下载流正在进行中,其他API请求响应工作,因此python应用程序没有问题。
但对于PHP应用程序,它不起作用。尝试了不同的选项,例如在Nginx中更改worker_processes,worker_connections。还有php-fpm中的池管理器配置。没有成功。
要从PHP应用程序请求REST API,我使用了PHP curl,即curl。
请帮忙。
最后问题解决了,主要是会话锁定问题。
您需要具有回调函数来处理会话关闭以及写入接收的数据,
回调函数:
function curlWriteHandler($ch, $data)
{
echo $data;
session_write_close();
return strlen($data);
}
&设置回调为,
curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'curlWriteHandler');
从以下答案/链接获得参考(我不知道在答案中指定链接的好主意,仍然)
What for do we use CURLOPT_WRITEFUNCTION in PHP's cURL?
How use CURLOPT_WRITEFUNCTION when download a file by CURL
&https://curl.haxx.se/libcurl/c/CURLOPT_WRITEFUNCTION.html
以上是关于如果正在进行流式下载,Nginx PHP-FPM无法提供请求的主要内容,如果未能解决你的问题,请参考以下文章
Nginx 和 PHP-FPM - 权限被拒绝 - Windows
Nginx + php-fpm下载php文件而不执行[重复]