题模板在部分网友的网站会偶尔提示:file_get_contents(): SSL: Handshake timed out的错误,网友的站点是php5.6版本,但也不是所有的都会出现此错误提示,原因是:在服务器上使用file_get_contents() 函数请求https 协议的url文件时会报错误,无法正确读取文件内容,在PHP中file_get_contents() 函数是用于将文件的内容读入到一个字符串中,是读取文件内容常用的函数之一,也是导航主题模板采集和调用百度热搜的代码。
跳过HTTPS验证:
使file_get_contents()函数跳过https验证
$stream_opts = [ "ssl" => [ "verify_peer"=>false, "verify_peer_name"=>false, ] ]; $response = file_get_contents('https://域名',false, stream_context_create($stream_opts));
如上代码,估计是好用的,但是我并没有测试,因为错误是偶尔出现,所以没办法测试,其中“$response”自定义函数,可以直接替换导航主题incloud.php文件中的“$html”,其他直接放在函数里就行,如图:
用curl替换file_get_content()
代码如下:
function get_data($url) { $ch = curl_init(); $timeout = 10; curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); //返回结果 curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout); //设置超时 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //https请求不验证证书 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //https请求不验证hosts $bddata = curl_exec($ch); curl_close($ch); return $bddata; }
然后把导航模板incloud.php文件,复制如上代码,将其放在“function navlee_bdhotword()”之前,在代码中找到“$html = file_get_contents('https://top.baidu.com/board?tab=realtime');”替换成“$html = get_data('https://top.baidu.com/board?tab=realtime');”即可,然后保存文件,后台清空缓存编译,修改代码前记得千万要备份,备份,备份。
以上代码就是针对“file_get_contents(): SSL: Handshake timed out”的几种解决方案,仅仅针对主题模板,代码仅供参考,如果遗漏望各位大佬斧正,哦对了,导航主题模板会即使更新,不会修改也没有问题,直接更新主题模板就好了,这个应该都会的吧!