gpt4 book ai didi

php - 如果正在进行流式下载,Nginx PHP-FPM 不提供请求

转载 作者:搜寻专家 更新时间:2023-10-31 21:25:00 25 4
gpt4 key购买 nike

在 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。

请帮忙。

最佳答案

最后问题解决了,主要是session lock问题。

你需要有回调函数来处理 session 关闭以及写入接收到的数据,

回调函数:

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

关于php - 如果正在进行流式下载,Nginx PHP-FPM 不提供请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38202275/

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