PHP5 升级到PHP7时curl注意事项

(从大量的CLOSE_WAIT发现的问题)

脚本:

curl_setopt($ch, CURLOPT_URL, $url);
#curl_setopt($ch, CURLOPT_HTTPHEADER, array("Connection: close"));
for($i = 0; $i < 1000; $i ++) {
对于curl来说: 1. 如果请求头中含有 Connection: close 则,执行完请求之后,curl会主动关闭连接,即使不主动curl\_close() 也没有关系 2. 如果请求头中没有Connection: close,则: 1. 如果curl句柄被销毁了,则连接自动关闭 2. 如果句柄没有被销毁(如: 被保存到了全局(或其他静态)变量中),则: 1. PHP5中,curl\_close() 可以关闭连接 2. PHP7中,curl\_close() 不会关闭连接(或许他猜测你可能还会用到),如果你不小心把句柄保存起来了,那么会有什么问题呢? 问题: 服务器端等待足够长时间后要关闭连接,而客户端却不做任何处理,导致连接处于CLOSE\_WAIT状态,如果足够多,会导致local port被用完。 不过,这个问题看似不好解决,也比PHP5中好处理,PHP5中如果调用了curl\_close,而且还把curl句柄保存了起来,则可能会出现保存了大量的句柄而自己却不知道(就是所谓的内存泄漏)

首页 - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.1. UTC+08:00, 2026-04-26 10:48
浙ICP备14020137号-1 $访客地图$