$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CONNECTTIMEOUT => 5,
CURLOPT_TIMEOUT => 15,
CURLOPT_SSL_VERIFYPEER => true,
]);
$res = curl_exec($ch);
if ($res === false) { error_log(curl_errno($ch) . ':' . curl_error($ch)); }
调用第三方接口偶尔返回 false,日志里只有空字符串,无法判断是超时还是证书问题。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,没有开启详细错误输出,也没有设置超时,失败原因被吞掉。
「PHP curl 返回 false」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。
一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。
别只看报错的最后一行,往上看几行,真正的起因通常在上面。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。
处理上按这个顺序:开启 CURLOPT_VERBOSE 与错误捕获;分别设置连接超时和总超时;记录 errno 便于区分。
改完只确认一件事:再次失败时日志里能看到具体错误码和描述,可以根据超时或证书分类处理。