手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表分类:PHP

ucapi注意:uc_feed_get函数的参数

discuz的几乎所有程序都有一个:加入事件,那么,其他平台怎么获取这个事件呢?那就是uc_feed_get方法了。但 事实上,有很多人都没有注意过这个方法有第二个参数。

如果你直接去uc的uc_feed表查看,你会经常性的发现这个表是空的。而autoIndex却很大,这又是为什么呢?

于是打开uc_client方法,却发现这个函数有两个参数,第一个参数是一次获取的条数,第二个参数是Delete,默认值为true,也就是说,获取完多少条后,他都会自动删除。因此uc_feed表就几乎是永远空着了。

但问题也就在这里。我怎么知道是哪个系统获取了这些feed呢?A系统获取Feed后,B是不是也获取到了呢。又怎么处理的呢?没有仔细看代码。。。

文档中uc_feed_get只提供了一个参数limit,可以查看:http://www.ucapi.com/api/feed.htm

建议在开发的时候,先找一个uc_feed_get方法。自己写程序处理。否则,应该会出现a系统有Feed,B系统没有Feed的情况。【慎重,主要还是没有队列。。。或者推送机制,否则在有了feed后,同步向各个系统推送一下Feed呢?不就结束了?】

uchome的UC接口中有一个addfeed方法,理论上是应该在其他系统添加后往uc.php推送的。只是没有看到哪里有推送代码。。。难道是放在事件中?迷惘了。

使用PHPRPC时的一点点郁闷 。。

不想多说啥。。。随便上代码 。。【include的时候是伪代码】

PHP代码
  1. include(phprc)  
  2. include(classfile);  
  3. if(isset($_SESSION['t'])){  
  4.    $_SESSION['t'] = new classfile;  
  5. }  
  6. $server = new phprpcserver;  
  7. $server->add($_SESSION['t']);  
  8. $server->start();  

不正常。。。如果把上面代码的第1、2行颠倒一下就行了。即:

PHP代码
  1. include(classfile);    
  2. include(phprc);    

OK,一切正常了。开始没发现。因为官方的例子是把测试用例写在同一个文件里。。所以一点问题都没有。。
郁闷了整整一天

ThinkSNS 插件配置BUG

由于最近一直在使用thinksns,所以相对关注的就比较多了一点。BUG偶尔也会发现一些,小的就不提了,没意义,偶尔也有可能是手误的关系,但一些稍大一点的。我还是写下来做个记录。。

比如这个插件配置的BUG。

一般来说,项目的配置要覆盖原始配置都是array_merge就结束了。于是乎,ThinkSNS在每个插件的Conf目录下的Config文件里也都有这么一行。

然而。。。问题就出来这里,插件的作者好象都没有注意过Array_merge的作用范围。

大多情况都是这样写的:

PHP代码
  1. $miniConfig = array (  
  2.     'DEBUG_MODE'        =>  false,  
  3.     'DEFAULT_ACTION'    =>   'index',  
  4. );  
  5. $array = require_once( SITE_PATH.'/config.inc.php' );  
  6. $array = array_merge$miniConfig,$array );  
OK,让我们来温习一下array_merge函数。
XML/HTML代码
  1. array_merge() merges the elements of one or more arrays together so that the values of one are appended to the end of the previous one. It returns the resulting array.   
  2.   
  3. If the input arrays have the same string keys, then the later value for that key will overwrite the previous one. If, however, the arrays contain numeric keys, the later value will not overwrite the original value, but will be appended.   
  4.   
  5. If only one array is given and the array is numerically indexed, the keys get reindexed in a continuous way.   

看到第二段没?如果有相同的KEY,后面的会覆盖前面的。。那么。。上面第6行的array_merge,和没运行有什么区别???

把参数顺序颠倒一下就OK了。。。

希望正常吧。。新年快乐

00-----00---------0---------00000000--00000000--00------00---00-----00--00000000--00-----00
00-----00--------000--------00000000--00000000---00----00---000----00--00000000--00-----00
00-----00-------00-00-------00-----00--00-----00----00--00----0000---00--00---------00-----00
00000000------00---00------00-----00--00-----00-----0000-----00-00--00--00000000--00--0--00
00000000-----00000000-----00000000--00000000------00------00--00-00--00000000--00-000-00
00-----00----0000000000----000-------000-------------00------00---0000--00---------0000-0000
00-----00---00---------00---000--------000------------00-------00----000--00000000--000---000
00-----00--00-----------00--000--------000------------00-------00-----00--00000000--00-----00
--------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------
-00------00--00000000---------0---------00000000------0000000--00000000---000----00000000-
--00----00---00000000--------000--------00000000------0000000--00-----00----00----00-----00-
---00--00----000--------------00-00------00-----00------------00--00-----00----00----000----00-
----0000-----00000000------00---00------00-----00-----------00---00-0---00----00----00--0--00-
-----00------00000000-----000000000----00000000----------00----00--0--00----00----00--0--00-
-----00------000----------00000000000---00-00-----------00-------00----000----00----00----000-
-----00------00000000---00----------00---00--00--------00000000-00-----00----00----00-----00-
-----00------00000000--00-----------00--00----00------00000000--00000000---0000---00000000-

改了半天,终于有点象样了。。。

ThinkSNS与Ucenter整合

上回我写过一点thinksns与ucenter整合的注意事项,详情可见:thinksns在整合Ucenter的时候注意事项,今天我写的另外的一些注意点。

上回仅仅是做UCAPI接口的通讯以及同步登录和退出,因此完全没有涉及到系统模块。今天我要讲的是,如何修改系统自带的login,logout,register,changepwd以及后台的管理。

如果你将login,logout,register都交由第三方来托管,那么,本文的前几段你几乎可以忽略掉。仅看最后的changepwd以及后台管理的注意事项。

OK,让我们开始吧。判断是否登录,我这里不管了,请看我上篇文章吧。。

【注意】由于加载uc_client,会导到错误发生,原因查看:THINKPHP框架与Ucenter通讯注意事项,因此,我在thinksns的define.inc.php中,强行定义了uc_connect为空,这是一个常量,在这里定义后,在uc_config文件中又定义了一次。会出现一个notice,这个我们不用管。常量是不会被覆盖的。之所以这样做,我是有理由的。thinksns在整合Ucenter的时候注意事项一文中我说过,uc.php没有用到任何thinkSNS除api外的核心函数,因此也就没有加载THINKPHP框架,所以不会有THINKPHP框架与Ucenter通讯注意事项文中所说的base类的冲突。而我们现在涉及的则是在thinksns内部使用uc_client,那就不得不先定义uc_connect模式了。正是基于常量不会被覆盖,所以uc_config文件,就不需要被修改了。【方法有点野蛮,但我想应该可以接受】

1、login,系统的login和dologin函数都在IndexAction.class.php中,因此,改起来比较方便,但是需要动 /public/themes/中的apps.html模版,因为登录框在这个文件中。没办法,不改不行,uc不支持email登录,所以不得不把 email改为username。然后在dologin方法中,直接调用接口,判断用户是否存在,如果不存在则返回错误,存在的话就登录。登录时还要判 断,如果该用户在thinksns库中没有记录,则生成一条记录,用户信息由uc_get_user取回来。同时设定active为1,代表是已激活用 户。然后就是原始的登录流程,生成session生成cookie之类的了

2、logout,除了系统标准的logout外,还需要调用一下uc_user_synlogout,以便向其他应用发向退出系统的请求

3、register,如果属于偷懒情况,你可以把register引用到别的应用中【我是自己定义了一个user应用来接管所有的,注册、登录、退出的,所以1、2这些问题,其实我都可以忽略掉】

4、changepwd,这是在用户信息管理界面中的。主要问题也就在这里。如果你不改程序,那你会在这里吐血,因为如果你的用户是通过 ucenter过来的,那么password并非标准的md5(password),它的password是有salt的【salt你可以看一下 ucenter表。不想多解释】,因此chagepwd功能,你必须得完全改掉。判断原始密码是否正确,也必须先用uc_get_user获取用户的信息 后,把获取回来的密码与提交过来的原始密码比对。更改密码时也需要用uc_user_edit进行修改【其实可以两步并一步,因为 uc_user_edit的第二个参数就是oldpassword,如果oldpassword不正确,会返回错误代码的,也可以少做一步】,更改完后, 就是一个比较重要的一步:把你刚才设置的newpassword,重写回thinksns数据库,可能你会认为是多余的,因为很明显,我们前面的操作都是 直接读写ucenter的用户资料,根本没有涉及到本地thinksns用户数据库,为什么还要写回密码?这其实是因为下面的第5步

5、管理,如果你是新安装thinksns,那么或许你不会遇到我说的问题,但如果你是已经安装好,而迁移过来的thinksns,你会发现,你永 远登录不了管理界面,为啥?因为你登录前台时的密码是发给ucenter的,而登录后台时,密码是thinksns本地的。因此,你必须得通过 changepwd功能先修改一下密码,然后才能操作【所幸管理员不多,这样的问题也都还能够被接受。】

---

如果有什么问题,还是发到http://www.ucapi.com去比较好。呵呵。在这里,我就纯记录一下而己了。

Tags: thinksns, ucenter