秋哥最近又遇上麻烦事了。前两天秋哥用腾讯云MySQL5.7云数据+云服务器搭建了一个Discuz X3.4的网站,但是在网站后台老是提示通信失败。虽然秋哥测试了用户注册、登录、修改密码、更换头像都是正常的,但是强迫症的我,始终觉得有1个红色X的通信失败怎么看怎么不舒服。通过找度娘和谷姐,包括discuz官方论坛,有的说是mysql5.7的问题,有的说是SSL开启后https的问题。众说纷纭,柒哥也一个个试了,始终没得到正确答案。discuz在老戴出走后,确实有点跟不上现在的节奏了。现在大多数网站都安装了https。秋哥,后来折腾好几天,总算解决了。这里给大家分享下: 先说服务器配置: centos7.4 64位 Nginx1.16 PHP7.1 数据库是用的腾讯云MySQL5.7云数据库。 下面开始解决方案: 第一步,修改uc_server/model/msic.php文件:1.查找第53行: [size=1em][size=1em]function[size=1em] [size=1em]dfopen2[size=1em]([size=1em]$url[size=1em], [size=1em]$limit[size=1em] = 0, [size=1em]$post[size=1em] = [size=1em]''[size=1em], [size=1em]$cookie[size=1em] = [size=1em]''[size=1em], [size=1em]$bysocket[size=1em] = [size=1em]FALSE[size=1em], [size=1em]$ip[size=1em] = [size=1em]''[size=1em], [size=1em]$timeout[size=1em] = 15, [size=1em]$block[size=1em] = [size=1em]TRUE[size=1em], [size=1em]$encodetype[size=1em] = [size=1em]'URLENCODE'[size=1em])[size=1em] [size=1em]{
修改为: [size=1em][size=1em]function[size=1em] [size=1em]dfopen2[size=1em]([size=1em]$url[size=1em], [size=1em]$limit[size=1em] = 0, [size=1em]$post[size=1em] = [size=1em]''[size=1em], [size=1em]$cookie[size=1em] = [size=1em]''[size=1em], [size=1em]$bysocket[size=1em] = [size=1em]FALSE[size=1em], [size=1em]$ip[size=1em] = [size=1em]''[size=1em], [size=1em]$timeout[size=1em] = 15, [size=1em]$block[size=1em] = [size=1em]TRUE[size=1em], [size=1em]$encodetype[size=1em] = [size=1em]'URLENCODE'[size=1em], [size=1em]$allowcurl[size=1em] = [size=1em]TRUE[size=1em])[size=1em] [size=1em]{
2.查找第59行: [size=1em][size=1em]return[size=1em] [size=1em]$this[size=1em]-[size=1em]>[size=1em]dfopen[size=1em]([size=1em]$url[size=1em], [size=1em]$limit[size=1em], [size=1em]$post[size=1em], [size=1em]$cookie[size=1em], [size=1em]$bysocket[size=1em], [size=1em]$ip[size=1em], [size=1em]$timeout[size=1em], [size=1em]$block[size=1em], [size=1em]$encodetype[size=1em])[size=1em];
修改为: [size=1em][size=1em]return[size=1em] [size=1em]$this[size=1em]-[size=1em]>[size=1em]dfopen[size=1em]([size=1em]$url[size=1em], [size=1em]$limit[size=1em], [size=1em]$post[size=1em], [size=1em]$cookie[size=1em], [size=1em]$bysocket[size=1em], [size=1em]$ip[size=1em], [size=1em]$timeout[size=1em], [size=1em]$block[size=1em], [size=1em]$encodetype[size=1em], [size=1em]$allowcurl[size=1em])[size=1em];
3.查找第62行: [size=1em][size=1em]function[size=1em] [size=1em]dfopen[size=1em]([size=1em]$url[size=1em], [size=1em]$limit[size=1em] = 0, [size=1em]$post[size=1em] = [size=1em]''[size=1em], [size=1em]$cookie[size=1em] = [size=1em]''[size=1em], [size=1em]$bysocket[size=1em] = [size=1em]FALSE[size=1em] , [size=1em]$ip[size=1em] = [size=1em]''[size=1em], [size=1em]$timeout[size=1em] = 15, [size=1em]$block[size=1em] = [size=1em]TRUE[size=1em], [size=1em]$encodetype[size=1em] = [size=1em]'URLENCODE'[size=1em])[size=1em] [size=1em]{
修改为: [size=1em][size=1em]function[size=1em] [size=1em]dfopen[size=1em]([size=1em]$url[size=1em], [size=1em]$limit[size=1em] = 0, [size=1em]$post[size=1em] = [size=1em]''[size=1em], [size=1em]$cookie[size=1em] = [size=1em]''[size=1em], [size=1em]$bysocket[size=1em] = [size=1em]FALSE[size=1em] , [size=1em]$ip[size=1em] = [size=1em]''[size=1em], [size=1em]$timeout[size=1em] = 15, [size=1em]$block[size=1em] = [size=1em]TRUE[size=1em], [size=1em]$encodetype[size=1em] = [size=1em]'URLENCODE'[size=1em], [size=1em]$allowcurl[size=1em] = [size=1em]TRUE[size=1em])[size=1em] [size=1em]{
4.查找第68行: [size=1em][size=1em]$port[size=1em] = ![size=1em]empty[size=1em]([size=1em]$matches[size=1em][[size=1em]'port'[size=1em]])[size=1em] ? [size=1em]$matches[size=1em][[size=1em]'port'[size=1em]][size=1em] : [size=1em]([size=1em]$matches[size=1em][[size=1em]'scheme'[size=1em]][size=1em] == [size=1em]'https'[size=1em] ? 443 : 80[size=1em])[size=1em];
在下面添加: [size=1em][size=1em]if[size=1em]([size=1em]function_exists[size=1em]([size=1em]'curl_init'[size=1em])[size=1em] && [size=1em]function_exists[size=1em]([size=1em]'curl_exec'[size=1em])[size=1em] && [size=1em]$allowcurl[size=1em])[size=1em] [size=1em]{[size=1em]
[size=1em] [size=1em]$ch[size=1em] = [size=1em]curl_init[size=1em]()[size=1em];
[size=1em] [size=1em]$ip[size=1em] && [size=1em]curl_setopt[size=1em]([size=1em]$ch[size=1em], CURLOPT_HTTPHEADER, [size=1em]array[size=1em]([size=1em]"Host: "[size=1em].[size=1em]$host[size=1em]))[size=1em];
[size=1em] [size=1em]curl_setopt[size=1em]([size=1em]$ch[size=1em], CURLOPT_USERAGENT, [size=1em]$_SERVER[size=1em][[size=1em]'HTTP_USER_AGENT'[size=1em]])[size=1em];
[size=1em] [size=1em]curl_setopt[size=1em]([size=1em]$ch[size=1em], CURLOPT_URL, [size=1em]$scheme[size=1em].[size=1em]'://'[size=1em].[size=1em]([size=1em]$ip[size=1em] ? [size=1em]$ip[size=1em] : [size=1em]$host[size=1em])[size=1em].[size=1em]':'[size=1em].[size=1em]$port[size=1em].[size=1em]$path[size=1em])[size=1em];
[size=1em] [size=1em]curl_setopt[size=1em]([size=1em]$ch[size=1em], CURLOPT_SSL_VERIFYPEER, [size=1em]false[size=1em])[size=1em];
[size=1em] [size=1em]curl_setopt[size=1em]([size=1em]$ch[size=1em], CURLOPT_SSL_VERIFYHOST, [size=1em]false[size=1em])[size=1em];
[size=1em] [size=1em]curl_setopt[size=1em]([size=1em]$ch[size=1em], CURLOPT_RETURNTRANSFER, 1[size=1em])[size=1em];
[size=1em] [size=1em]if[size=1em]([size=1em]$post[size=1em])[size=1em] [size=1em]{[size=1em]
[size=1em] [size=1em]curl_setopt[size=1em]([size=1em]$ch[size=1em], CURLOPT_POST, 1[size=1em])[size=1em];
[size=1em] [size=1em]if[size=1em]([size=1em]$encodetype[size=1em] == [size=1em]'URLENCODE'[size=1em])[size=1em] [size=1em]{[size=1em]
[size=1em] [size=1em]curl_setopt[size=1em]([size=1em]$ch[size=1em], CURLOPT_POSTFIELDS, [size=1em]$post[size=1em])[size=1em];
[size=1em] [size=1em]}[size=1em] [size=1em]else[size=1em] [size=1em]{[size=1em]
[size=1em] [size=1em]parse_str[size=1em]([size=1em]$post[size=1em], [size=1em]$postarray[size=1em])[size=1em];
[size=1em] [size=1em]curl_setopt[size=1em]([size=1em]$ch[size=1em], CURLOPT_POSTFIELDS, [size=1em]$postarray[size=1em])[size=1em];
[size=1em] [size=1em]}[size=1em]
[size=1em] [size=1em]}[size=1em]
[size=1em] [size=1em]if[size=1em]([size=1em]$cookie[size=1em])[size=1em] [size=1em]{[size=1em]
[size=1em] [size=1em]curl_setopt[size=1em]([size=1em]$ch[size=1em], CURLOPT_COOKIE, [size=1em]$cookie[size=1em])[size=1em];
[size=1em] [size=1em]}[size=1em]
[size=1em] [size=1em]curl_setopt[size=1em]([size=1em]$ch[size=1em], CURLOPT_CONNECTTIMEOUT, [size=1em]$timeout[size=1em])[size=1em];
[size=1em] [size=1em]$data[size=1em] = [size=1em]curl_exec[size=1em]([size=1em]$ch[size=1em])[size=1em];
[size=1em] [size=1em]$status[size=1em] = [size=1em]curl_getinfo[size=1em]([size=1em]$ch[size=1em])[size=1em];
[size=1em] [size=1em]$errno[size=1em] = [size=1em]curl_errno[size=1em]([size=1em]$ch[size=1em])[size=1em];
[size=1em] [size=1em]curl_close[size=1em]([size=1em]$ch[size=1em])[size=1em];
[size=1em] [size=1em]if[size=1em]([size=1em]$errno[size=1em] || [size=1em]$status[size=1em][[size=1em]'http_code'[size=1em]][size=1em] != 200[size=1em])[size=1em] [size=1em]{[size=1em]
[size=1em] [size=1em]return[size=1em];
[size=1em] [size=1em]}[size=1em] [size=1em]else[size=1em] [size=1em]{[size=1em]
[size=1em] [size=1em]return[size=1em] ![size=1em]$limit[size=1em] ? [size=1em]$data[size=1em] : [size=1em]substr[size=1em]([size=1em]$data[size=1em], 0, [size=1em]$limit[size=1em])[size=1em];
[size=1em] [size=1em]}[size=1em]
[size=1em][size=1em]}
5.查找原95行,现在的127行: [size=1em][size=1em]if[size=1em]([size=1em]![size=1em]$fp[size=1em] = @[size=1em]fsocketopen[size=1em](([size=1em]$scheme[size=1em] == [size=1em]'https'[size=1em] ? [size=1em]'ssl'[size=1em] : [size=1em]$scheme[size=1em])[size=1em].[size=1em]'://'[size=1em].[size=1em]([size=1em]$scheme[size=1em] == [size=1em]'https'[size=1em] ? [size=1em]$host[size=1em] : [size=1em]([size=1em]$ip[size=1em] ? [size=1em]$ip[size=1em] : [size=1em]$host[size=1em]))[size=1em], [size=1em]$port[size=1em], [size=1em]$errno[size=1em], [size=1em]$errstr[size=1em], [size=1em]$timeout[size=1em]))[size=1em] [size=1em]{
修改为: [size=1em][size=1em]if[size=1em]([size=1em]![size=1em]$fp[size=1em] = @[size=1em]fsocketopen[size=1em](([size=1em]$scheme[size=1em] == [size=1em]'https'[size=1em] ? [size=1em]'ssl://'[size=1em] : [size=1em]''[size=1em])[size=1em].[size=1em]([size=1em]$scheme[size=1em] == [size=1em]'https'[size=1em] ? [size=1em]$host[size=1em] : [size=1em]([size=1em]$ip[size=1em] ? [size=1em]$ip[size=1em] : [size=1em]$host[size=1em]))[size=1em], [size=1em]$port[size=1em], [size=1em]$errno[size=1em], [size=1em]$errstr[size=1em], [size=1em]$timeout[size=1em]))[size=1em] [size=1em]{
ok,保存,替换原来的msic.php文件。 第二步,设置Discuz应用信息。修改完文件后,更新下discuz后台和ucenter应用管理里的信息,如果还是通信失败,就分别在dz后台和uc后台把服务器IP填上去就可以了。注意IP信息要和uc后台首页里,uc系统检测到的主机信息相匹配。 啊哈,Discuz终于被秋哥绿了! 最后和大家分享两个文件,如果你懒得该的话,直接替换就行了。 可解压后直接替换。 |