今天发生了一件很奇怪的事情,原来file_get_contents()能正常使用,今天不知道怎么回事使用它居然报错了。
错误信息如下
file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed
于是从网上找解决的办法
方案一:
$arrContextOptions=array(
"ssl"=>array(
"verify_peer"=>false,
"verify_peer_name"=>false,
),
);
$img = file_get_contents($img, false, stream_context_create($arrContextOptions));
方案二:
修改服务器的配置
找到密钥文件的位置
var_dump(openssl_get_cert_locations());
返回内容如下
array(8) {
["default_cert_file"]=>
string(31) "/usr/local/openssl/xxx/cert.pem"
["default_cert_file_env"]=>
string(13) "SSL_CERT_FILE"
["default_cert_dir"]=>
string(28) "/usr/local/openssl/xxx/certs"
["default_cert_dir_env"]=>
string(12) "SSL_CERT_DIR"
["default_private_dir"]=>
string(30) "/usr/local/openssl/xxx/private"
["default_default_cert_area"]=>
string(22) "/usr/local/openssl/xxx"
["ini_cafile"]=>
string(0) ""
["ini_capath"]=>
string(0) ""
}
修改php.ini
openssl.cafile=/usr/local/openssl/xxx/cert.pem
重启php
结果还是报错,结果发现服务器上根本没有这个pem文件,于是下载证书放进去,完美解决。
证书地址http://curl.haxx.se/ca/cacert.pem
如果自己的权限足够,不了解数据并且对安全有要求的,方案二是很安全的。
如果自己权限不足,但是确定数据的可靠性,方案一是很快的。