查看: 6023|回复: 17

[整 合] 成功整合DiscuzX2.5,详细分享整合心得

  [复制链接]
发表于 2012-5-8 10:51:17 | 显示全部楼层 |阅读模式
本帖最后由 netsesame 于 2012-5-8 10:51 编辑

整合环境:
phpcmsV9 + discuz X2.5(带UCHome整合) 全部是最新版。

思路及步骤:
首先感谢“phpcms V9 整合 Discuz! X2 标准教程”:http://bbs.phpcms.cn/thread-285274-1-1.html大家先按照此教程去做,遇到问题后读下面的文字。

原理通俗说明:
首先声明,坛子中关于原理这一块的解释,很多地方太口语化,不注重科普知识的严肃性。而且,用户多是知其然而不知其所以然,所以遇到问题就会一筹莫展。特别是遇到版本升级、bug等问题。

我为此也是吃尽了苦头,对照着事实而非的说明,反复尝试多次不成功。在打开PHPIDE调试跟踪数小时之久,终于发现问题之所在,并分享给真正需要的人,让大家都成为专家。其实,问题并不是想象中那么严重。

-----------------------------------分界线-----------------------------------
1、为什么要整合?
phpcms提供了phpsso、discuz提供了uchome。这是大家真正费解的地方。为什么这么麻烦?
其实,在这些整合出现之前,各种webapp是没有统一标准的,不同的厂商、不同的产品,同一产品不同的版本,都缺乏有效的设计规范,大家摸着石头过河,每一次的更新都算得上创新性产品。疲于奔命的是各大站长,升级打补丁,累的是苦不堪言。

当这些异构的应用突然有一天需要互相对话,共享数据,麻烦来了。数据库不同、应用接口迥异,怎么办?因此,一些大的厂商,例如phpcms、discuz开始动脑筋。在商业化模式的网络异构环境中,数据中心的整合已不是什么新的技术,因此把这些整合模式随便搬一些到网站应用中,不存在什么技术障碍。

大多数的整合方案,都是提供一个中间件的模式,A需要用B的数据,好交给C,C负责和B对话,完了交给A。phpSSO和UCHome就是这个中间件。但在我们的这个话题中,由于phpSSO和UCHome都是中间件,二者是不同的厂商推出的功能几乎相同的产品,所以,相当于在本来就复杂的环节中有增加了一环。

2、phpSSO + UCHome的使命
安装了phpcms和discuz之后,其实在你的后台,同一个用户存在了四份基本相同的数据。其中,phpcms一份、phpSSO一份、Discuz一份、UCHome也保留一份。没办法,这就是整合的代价。

当你在phpcms中注册、登录、编辑一个用户的时候,如果你启用了phpSSO,那么这些操作都会委托给phpSSO。而如果你同时又启用了UCHome,恭喜你,你已经进入了混沌世界。

phpSSO首先检查自己和UCHome的数据是否一致,存在与否,然后进行了一系列复杂的如果那么的逻辑判断,最终的结果是,UCHome的用户表保持同phpCMS中一致。但是奇怪的是,UCHome并不像phpSSO那么智能,他并不同步discuz中的用户表,而是等待用户登录的时候去激活——其实也就是告诉用户,你的数据我要同步一下,你完善下资料吧。

刚才无意中发现有人在坛子里收费,其实,稍微改一下代码就可以实现完全的同步。不过,作为UCHome的整合完整性,就被破坏了。

如果你是新系统,两边的用户都是新注册,那么你是最轻松的。无论在哪边注册,都会哗啦啦4张表一致向左看齐然后向前看。麻烦的就在于只有一边有数据,往另一边同步的时候。这些复杂性,大家都不用关心。可是,我们还是遇到了麻烦。

3、BUG
首先说下phpsso的通讯模式是socket,目前的开发工具、抓包工具全部无法跟踪。坑爹的只好在所有关键的地方设调试信息蹲点跟踪,为了抓到下面的几个bug,我的apache至少重启5次以上。

1)phpsso_server/api/uc_client/model/base.php
init_db()函数
$this->db->connect(UC_DBHOST, UC_DBUSER, UC_DBPW, '', UC_DBCHARSET, UC_DBCONNECT, UC_DBTABLEPRE);
我真的不知道说什么好,第4个参数空着,那里是要传入的是UCHome的数据库名称。结果是phpcms那边怎么都无法登录,而且什么都看不出来。改成下面这句话OK:
$this->db->connect(UC_DBHOST, UC_DBUSER, UC_DBPW, UC_DBNAME, UC_DBCHARSET, UC_DBCONNECT, UC_DBTABLEPRE);

2)email重复?
我的discuz管理员账号和phpcms的一个用户账号用的是一个同一个email,结果你懂得,就是无法同步。什么错误都没有。吃奶的劲都使出来,才发现socket的返回值是-6,天知道这个-6是啥意思,费了好大劲,才找到一个常量声明:email不能重复。这种问题,同步的时候为啥就不能告诉用户呢?

3)cookie清除
记住了,一定要清除。至于为什么,我也没搞懂。如果你不这样做,那么你就等着两个结果:a) 死活同步不了; b) 网页有时像死了一样不动,重启吧。

我遇到这个问题是这样:同步不成功,我想退出重新登录,结果浏览器死了。折腾了好久,结果无意中尝试清除了一下cookie,好了。我估计,跟uchome那套复杂的session机制有关。

4)修改discuz的那几个代码
我正在研究为什么要修改那几个地方,我目前没发现修改不修改有什么不同。那个param[header]=true/false,影响的是uchome在session到期后的重定向问题,还有待进一步探索。有经验的不妨分享一下。

评分

参与人数 3鲜花 +30 收起 理由
yuhaibo + 15 很给力!
nvrenxin + 5 很给力!
yudan215 + 10 很给力!

查看全部评分

发表于 2012-5-8 16:13:52 | 显示全部楼层
辛苦了。 好长的一篇。
回复 支持 反对

使用道具 举报

发表于 2012-5-8 16:20:04 | 显示全部楼层
前排支持`!!!!!!
回复 支持 反对

使用道具 举报

发表于 2012-5-8 16:22:40 | 显示全部楼层
额`楼主是不是把UCENTER写成了UCHOME了??
回复 支持 反对

使用道具 举报

发表于 2012-5-9 18:55:55 | 显示全部楼层
貌似我整合无此麻烦,轻松搞定
回复 支持 反对

使用道具 举报

发表于 2012-5-9 19:26:20 | 显示全部楼层
辛苦了。 好长的一篇。
回复 支持 反对

使用道具 举报

发表于 2012-5-10 14:43:09 | 显示全部楼层
这个专业啊
回复 支持 反对

使用道具 举报

发表于 2012-5-15 21:00:19 | 显示全部楼层
宝贵的经验
谢谢分享了
回复 支持 反对

使用道具 举报

发表于 2012-6-6 15:38:55 | 显示全部楼层
请问楼主会员头像可以整合了吗?
回复 支持 反对

使用道具 举报

发表于 2012-6-7 09:52:47 | 显示全部楼层
你在本地 测试的把
回复 支持 反对

使用道具 举报

发表于 2012-6-10 21:56:03 | 显示全部楼层
好的教程得顶起来。
回复 支持 反对

使用道具 举报

发表于 2012-6-15 15:38:35 | 显示全部楼层
很专业,不过没太看懂
回复 支持 反对

使用道具 举报

发表于 2012-6-17 01:39:53 | 显示全部楼层
辛苦楼主了www.dabanche.com
回复 支持 反对

使用道具 举报

发表于 2012-6-19 15:53:37 | 显示全部楼层
稍微改一下代码就可以实现完全的同步
回复 支持 反对

使用道具 举报

发表于 2012-6-27 14:01:07 | 显示全部楼层
不错,写的一手好文章
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 点击这里注册

本版积分规则

小黑屋|Archiver|phpcms网站管理系统 ( 京ICP备14011169 )

GMT+8, 2019-6-19 04:58 , Processed in 0.199554 second(s), 12 queries , Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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