找回密码
 立即注册
查看: 74|回复: 0

解决Discuz X3.4 与 UCenter 1.6通信失败问题

[复制链接]

151

主题

223

回帖

885

积分

管理员

UID
2
阅读权限
200
在线时间
67 小时
注册时间
2012-6-24
最后登录
2024-5-18
发表于 2020-8-4 22:08:06 | 显示全部楼层 |阅读模式
秋哥最近又遇上麻烦事了。前两天秋哥用腾讯云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终于被秋哥绿了!
最后和大家分享两个文件,如果你懒得该的话,直接替换就行了。
可解压后直接替换。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|蔡仲秋的个人空间 ( 冀ICP备2024049637号-1|冀公网安备13100002000150号 )

GMT+8, 2024-5-19 16:39

shengfang.ren caizhongqiu

2007-2024

快速回复 返回顶部 返回列表