gpt4 book ai didi

php - 如何使PHP中止与服务器联系的尝试

转载 作者:行者123 更新时间:2023-12-03 12:03:18 25 4
gpt4 key购买 nike

我想我一定对PHP套接字超时有误解。我正在使用get_headers()检查服务器是否迅速响应。我想给服务器15s响应,所以我使用ini_set('default_socket_timeout', 15)。为了测试这一点,我可以使用sleep()强制服务器响应缓慢。也就是说,我说

$headers_array = get_headers('example.com/index.php?sleep=25')

与example.com/index.php包含(仅)php代码
sleep(@$_GET['sleep']);
echo 'After a delay I am now responding';

我发现PHP似乎总是要等到连接关闭后才能继续。到那时,延迟是否超过default_socket_timeout PHP报告

failed to open stream: HTTP request failed!



并将 $headers_array设置为 false。但是要注意的一点是,它似乎要等到连接关闭后才能执行。另外,它等待连接关闭的时间似乎超出了PHP的执行时间。

天真的,我希望PHP在继续之前最多等待default_socket_timeout,并且这段时间不会超出php的执行时间预算(如 set_time_limit()所设置)。显然我的理解是错误的。

上下文是我有一台服务器,它有时会过载,并且对HTTP请求的响应非常缓慢。我想检查来自其他服务器的响应时间。有没有一种简单的方式对PHP说“联系此服务器,但不要等待超过15秒的响应时间”

最佳答案

如果您使用的是php 7.1或更高版本,则可以尝试使用明确的超时创建上下文,如下所示:

$context = stream_context_create(array('http'=> array(
'timeout' => 15.0,
'ignore_errors' => true,
)));
$headers_array = get_headers('example.com/index.php?sleep=25', 0, $context);

这将显式设置 get_headers操作的超时时间,而无需依赖默认值。

总体而言,不幸的是,根据我的经验,我发现PHP中的套接字超时相当不可靠。

关于php - 如何使PHP中止与服务器联系的尝试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54181316/

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