PHP/CURL 冻结服务器

PHP/CURL freezing server

提问人:Ben 提问时间:11/17/2023 最后编辑:Ben 更新时间:11/17/2023 访问量:38

问:

我有php CURL代码,通过ajax脚本运行。代码运行良好,没有问题,但我注意到,当代码执行时,整个服务器会停止/冻结,直到 CURL 完成。这只是在测试期间发生的。如果这是一个实时站点,我的服务器将处于完全超时状态。

运行 Apache2、PHP7.4、php7.4-curl、Debian 10

$url_sh = "****";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURL_TIMEOUT, 200);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_URL,$url_sh);
$result=curl_exec($ch);
curl_close($ch);

$obj = json_decode($result, true);
$approved_img = '<img src="'.$obj['lighthouseResult']['audits']['final-screenshot']['details']['data'].'">';
php ajax curl php-curl

评论

3赞 Sammitch 11/17/2023
如果包含此代码的页面具有打开的会话,则后续请求将阻止,直到显式关闭会话或代码退出。它仅针对该用户/会话被阻止,而不是对整个服务器被阻止。
0赞 nice_dev 11/17/2023
向我们展示一个最小可重复的例子。
0赞 Don't Panic 11/17/2023
"整个服务器停止/冻结“——这到底是什么意思?你观察到了什么,是如何观察到的?
0赞 Ben 11/21/2023
多亏了@Sammitch接缝就是这样

答:

0赞 Ben 11/21/2023 #1

根据@Sammitch:

如果包含此代码的页面具有打开的会话,则随后 请求将被阻止,直到会话显式关闭,或者 当代码退出时。它只针对该用户/会话被阻止,而不是 整个服务器。

评论

0赞 Sammitch 11/21/2023
您可以在长时间运行的操作之前调用 session_write_close(),以释放另一个进程的会话锁。