在函数 file_get_contents():中使用 https 协议时出错

2016-07-08 15:05:14 +08:00
 xiaoyong

错误提示:

Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in

本地系统是 Win7 。相同的 php 代码在另一台本地 Mac 电脑中测试没有问题,只有在 Win7 有这个错误。 而且按照网上已经可以找到的原因: php.ini 中配置: curl.cainfo=C:\wamp\xxxxxxx\cacert.pem openssl.cafile=C:\wamp\xxxxxxx\cacert.pem 等方法都试过,还是无效。

疑惑的就是:相同代码在本地 Mac 环境和远程服务器 linux 环境都可可以,在本地 Win7 环境下为什么不可以。 php.ini 配置也对比了,该开启的都开启了。

如下图:

8447 次点击
所在节点    PHP
11 条回复
UnisandK
2016-07-08 15:22:06 +08:00
eoo
2016-07-08 18:27:43 +08:00
用 CURL 有相应的处理 https 的参数
fcicq
2016-07-08 18:43:34 +08:00
OpenSSL 版本? 服务器是否开了 SNI?
cccRaim
2016-07-08 19:32:45 +08:00
既然提到 file_get_content 了,那我就再提一个问题,怎么处理非 200 的网页内容,好像不是 200 段的就直接不读取网页内容了,让我遵从 restful api 的人非常尴尬
yexiaoxing
2016-07-08 20:43:33 +08:00
cccRaim
2016-07-08 21:01:10 +08:00
@yexiaoxing 果然还是要用 curl ,总之谢谢了
yangxin0
2016-07-08 21:56:40 +08:00
服务器证书对应 root 证书你没有配置好
xiaoyong
2016-07-08 23:13:41 +08:00
@yangxin0 服务器是第三方的,我控制不了。只能访问他们提供的 URL ,即使在浏览器打开这个 URL 默认也是不显示的,提示证书有问题。
chaegumi
2016-07-09 06:27:02 +08:00
昨天我一台机子用 composer 有出这样的错误,是 php5.5.7 ,解决不了,后边我又安装了一个 php7 ,用 php7 跑 composer 就好了,也不知道啥回事
rainfox
2019-03-13 12:45:07 +08:00
服务器 下载这个证书,http://curl.haxx.se/ca/cacert.pem


php.ini 配置

openssl.cafile = "/etc/ssl/certs/cacert.pem"//你实际下载证书的路径

重启 php 即可
irudder
2019-04-02 09:30:35 +08:00
遇到同样的问题
解决办法:
$stream_opts = [
"ssl" => [
"verify_peer"=>false,
"verify_peer_name"=>false,
]
];

$response = file_get_contents("https://www.example.com",
false, stream_context_create($stream_opts));

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/291163

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX