file_get_contents 获取 https 页面,报 failed to open stream 错误

问题是在网站更换了域名和 ssl 证书后引起,用原来测试的域名和证书 file_get_contents 是没问题的。测试的证书是阿里云免费的 dv 证书,正式的证书是阿里付费的 Symantec EV 证书。

服务器环境是 apache,https 页面可以正常访问,file_get_contents 其他 https 页面没问题,比如 https://www.baidu.com/ 可以正常获取到,测试域名解析还在,获取测试域名的地址也能获取到,但同一地址修改成正式域名后就报错了。

因为代码及服务器配置没动,所以基本确定是更换了 EV 证书引起的,不知道还需要什么配置?

附言 1  ·  4年前

正式域名申请了个免费的dv证书,更新后问题还存在,说明跟证书没关系。
可能某个地方权限有问题

附言 2  ·  4年前
        $ch = curl_init(); 
        curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false ); 
        curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); 
        curl_setopt( $ch, CURLOPT_URL, 'https://www.zhimm.com' ); 
        curl_setopt( $ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.69 Safari/537.36' ); 
        $data = curl_exec( $ch ); 
        curl_close( $ch ); 
        echo $data;

使用curl也是输出空白,url换成https://www.baidu.com就没问题

taozywu
最佳答案

@Tking
可以参考如下

  1. 检查php.ini是否开启openssl
  2. 可以尝试用如下代码测试
$options = array(
            'http' => array(
                'method' => 'POST',
                'header' => 'Content-type:application/x-www-form-urlencoded;charset=UTF-8',
                'content' => $stringData
            ),
            // 解决SSL证书验证失败的问题
            "ssl"=>array(
                "verify_peer"=>false,
                "verify_peer_name"=>false,
            )
        );
        $context = stream_context_create($options);
  1. 再检查一下证书

--

最后祝成功!!

4年前 评论
Tking (楼主) 4年前
taozywu (作者) 4年前
Tking (楼主) 4年前
Tking (楼主) 4年前
taozywu (作者) 4年前
讨论数量: 8
taozywu

@Tking
可以参考如下

  1. 检查php.ini是否开启openssl
  2. 可以尝试用如下代码测试
$options = array(
            'http' => array(
                'method' => 'POST',
                'header' => 'Content-type:application/x-www-form-urlencoded;charset=UTF-8',
                'content' => $stringData
            ),
            // 解决SSL证书验证失败的问题
            "ssl"=>array(
                "verify_peer"=>false,
                "verify_peer_name"=>false,
            )
        );
        $context = stream_context_create($options);
  1. 再检查一下证书

--

最后祝成功!!

4年前 评论
Tking (楼主) 4年前
taozywu (作者) 4年前
Tking (楼主) 4年前
Tking (楼主) 4年前
taozywu (作者) 4年前
taozywu

@Tking
我这边使用你给的代码, 测试是正常的

1) 代码

file

2) 结果

file

===
最后我猜测:请先ping下域名对外?是否加了host?

4年前 评论
taozywu

@Tking
我这边使用你给的代码, 测试是正常的

1) 代码

file

2) 结果

file

===
最后我猜测:请先ping下域名对外?是否加了host?

4年前 评论
taozywu

@Tking
我这边使用你给的代码, 测试是正常的

1) 代码

file

2) 结果

file

===
最后我猜测:请先ping下域名对外?是否加了host?

4年前 评论
taozywu

@Tking
我这边使用你给的代码, 测试是正常的

1) 代码

file

2) 结果

file

===
最后我猜测:请先ping下域名对外?是否加了host?

4年前 评论
taozywu

@Tking
我这边使用你给的代码, 测试是正常的

1) 代码

file

2) 结果

file

===
最后我猜测:请先ping下域名对外?是否加了host?

4年前 评论
taozywu

@Tking
我这边使用你给的代码, 测试是正常的

1) 代码

file

2) 结果

file

===

最后我猜测:请先ping下域名对外?是否加了host?

4年前 评论
taozywu

@Tking
我这边使用你给的代码, 测试是正常的

1) 代码

file

2) 结果

file

===

最后我猜测:请先ping下域名对外?是否加了host?

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!