强烈向大家推荐一个好网站,【我要自学网】,教程由在校老师录制,有办公会计、平面设计、室内设计、机械设计、网页编程、影视动画等教程.....让你足不出门,都可以体验学校的专业教育!
做微信公众平台开发,要通过读取公众平台的一个网址实时获得access_token,用了file_get_contents 在本地测试一切正常,但在服务器上却返回空数据。经过网上查资料原来要修改php.ini中的一个默认配置:
1.windows下的PHP,只需要到php.ini中把extension=php_openssl.dll前面的;删掉,重启服务就可以了。
2.linux下的PHP,就必须安装openssl模块,安装好了以后就可以访问了。
3.如果服务器你不能修改配置的话,那么就使用curl函数来替代file_get_contents函数,当然不是简单的替换啊。还有相应的参数配置才能正常使用curl函数。
我的是windows服务器,修改后,OK!
如果开启了php_openssl.dll 仍无法正常请求https,可以参考一下方式处理:
1,下载https证书到服务器
服务器 下载这个证书,http://curl.haxx.se/ca/cacert.pem php.ini 配置 openssl.cafile = "/etc/ssl/certs/cacert.pem"//你实际下载证书的路径 重启 php 即可
2,使用cURL 函数处理 https 的参数,获取文件内容
function getSSLPage($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSLVERSION,3); $result = curl_exec($ch); curl_close($ch); return $result; } var_dump(getSSLPage("https://xxx.xxx.xxx")); 还有一种post function getSSLPage($url) { $post = array( '字段' => '值', ); $url = '对应url地址'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //返回数据不直接输出 curl_setopt($ch, CURLOPT_POST, 1); //发送POST类型数据 curl_setopt($ch, CURLOPT_POSTFIELDS, $post); //POST数据,$post可以是数组,也可以是拼接 $content = curl_exec($ch); //执行并存储结果 curl_close($ch); } //引用:https://stackoverflow.com/questions/14078182/openssl-file-get-contents-failed-to-enable-crypto
3,使file_get_contents()函数跳过https验证
$stream_opts = [ "ssl" => [ "verify_peer"=>false, "verify_peer_name"=>false, ] ]; $response = file_get_contents("https://xxx.xxx.xxx",false, stream_context_create($stream_opts));
开发中建议使用cURL 函数替代file_get_contents()函数。