curl 用完千万别忘 close !

正常的一天,忙碌的一天,只是,应用中某个 api 频繁报 502 。
这个神奇了,查代码,一路查,最后竟然是一个 curl 错误了导致的,于是开始检查 curl 的代码。
一般的 curl 大概是这样

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$content = curl_exec($ch);
curl_close($ch);
return $content;

看起来一切正常呀。

经过各种尝试,各种断点各种参数各种记日志各种折腾都无果。

然后。。。

睡了一觉想起来了。于是。。

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
try{
    $content = curl_exec($ch);
} finally{
    curl_close($ch);
}

好了。

总结,无论何时,记得关闭curl,不是简单在地 curl_exec 后 curl_close ,记得 try finally 。
那些看到标题没点进来的朋友,嗯,祝你们好运。

本文章首发在 Laravel China 社区