我有一个用PHP编写的Web应用程序,运行在带有NGINX的Linux Azure虚拟机上。该应用程序连接到具有NGINX(类似Linux Azure虚拟机)的独立服务器上的API(用Python编写)。此 API 执行复杂的操作,需要 30 秒到 20 分钟才能完成。因此,应用程序必须等待它。
问题是,由于等待时间较长,API 响应未在 Web 应用程序中注册。我尝试了以下方法:
— 在 API的端点和日志中验证 API 在长时间处理后是否提供了响应(确实如此)
我怀疑这是一个超时问题,所以已经尝试过:
— 修复了 PHP 超时设置和/login_c/check_login
端点的超时问题
— 检查了从 API 发送和接收的请求和响应的代码,我正在使用 curl 方法。这是 curl 超时的参数:
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 2100);".
exec 方法在后台执行:
exec($command);
以下文章未提供解决方案:
在 PHP 中设置 Curl 的超时
PHP cURL 方法在某些 URL 上超时,但命令行始终有效
关于如何解决这个问题的任何建议?
您必须编辑 php.ini 或添加到 php 脚本:
ini_set("max_execution_time",1800); //for 30 minutes request
这似乎解决了问题:
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 2100);".