一.问题情况
今天使用PHP写程序获取指定接口的内容,获取内容为空加上报错报错提示显示routines:ssl3_get_server_certificate:certificate verity failed in XXX.php on line XXX.
PHP Warning: file_get_contents(): Failed to enable crypto in XXX.php on line XXX,有相同问题的小伙伴可以看下.
二.解决办法
查了下资料,这个应该是发起https请求的php服务器根证书核验失败造成的,所以第一种解决办法,直接在服务器上更新根证书
1 |
yum install ca-certificates |
更新完证书以后再请求就一切正常了,但是机构颁发的根证书有效期基本都是几年.可能后面还会出问题,可以换成curl请求带-k参数忽略证书验证.或者是file_get_contents()添加一下忽略验证参数
1 2 3 4 5 6 7 |
$stream_opts = [ "ssl" => [ "verify_peer"=>false, "verify_peer_name"=>false, ] ]; $result = file_get_contents("https://www.1987619.com", false, stream_context_create($stream_opts)); |
(1)、file_get_contents语法:
1 |
file_get_contents(path,include_path,context,start,max_length) |
(2)、file_get_contents相关参数:
(3)、stream_context_create相关:
创建并返回一个资源流上下文,该资源流中包含了 options 中提前设定的所有参数的值。
1 |
stream_context_create ([ array $options [, array $params ]] ) : resource |
PS:options必须是一个二维关联数组,格式如下:$arr['wrapper']['option'] = $value
。默认是一个空数组