Tag Archives: 互联网

解决WordPress无法自动更新插件及主程序问题

最近升级到WordPress2.7后,有一个一直困扰我的问题终于到了不得不解决的时候了。
问题描述:

使用WordPress2.7的自动升级功能时,提示:You do not have sufficient permissions to update plugins for this blog或者:您没有权限更新插件。
在插件管理页面,如果有插件更新,应该会自动提示,并有一个直接升级的选项。但在某次升级后,该选项消失。只能手动FTP更新插件。

问题分析
(不想看分析的同学,请直接拖拉到后面的解决方案):
今年WordCamp期间,LEMONed同学怀疑是文件版本不协调或不完整,建议我重新安装整个WordPress来解决这个问题。但是尝试后,无效。
后来怀疑是帐号权限问题,经过检查数据库,发现自己的帐号确实是Administrator,帐号等级也是最高的10.这条路,也死了。
就这样,这个问题放了3个月,直到前几天更新了WordPress2.7。在这次的更新里,我最喜欢的就是主程序自动更新功能,但如插件一样,无法更新。
但这一次的问题比上一次清晰了很多,因为主程序更新是靠wp-admin\update-core.php这个文件实现的。既然是这里报了错,那么我们就从这个文件开始分析吧。
我分析了一下update-core那个文件,第一句就要判断if ( ! current_user_can(‘update_plugins’) )再去capabilities.php里面看了看current_user_can这个函数,发现是一个权限分配函数,判断方法有点诡异(hc才疏学浅,没见识过这类权限分配方法),结合codex的数据库结构看了半天才看懂:
function current_user_can( $capability ) {    $current_user = wp_get_current_user();
    if ( empty( $current_user ) )        return false;
    $args = array_slice( func_get_args(), 1 );    $args = array_merge( array( $capability ), $args );
    return call_user_func_array( array( &$current_user, ‘has_cap’ ), $args );}
一开始以为它应该是通过储存在数据库usermeta这张表里的某些信息来判定当前用户是否拥有某些权限。
可是没找到update_plugins这个权限在数据库的对应位置,所以我开始思考是否这些权限是由一个数组构成,每个权限有一个对应编号。但是按着这个思路,也没有发现什么有价值的内容。
然后开始在数据库里一张张表的闲逛,突然想到wp_get_current_user这个函数是从哪取数据呢?然后就沿着这条线发现了在options这张混乱不堪的表里有一个很重要的参数:wp_user_roles。
这个参数在codex里没有详细的说明,所以只有靠自己摸索。从结构来看,这个参数的值还算好理解,类似于一个XML文档,树形的。每个角色应该拥有什么权限,全都在这里。
我仔细检查了一个全新WordPress2.7数据库与我数据库option表下wp_user_roles的区别,发现我的数据库缺少update_plugins和delete_plugins这两个权限。至此,问题分析结束。
查阅Codex得知,update-plugin这一项是从2.6才加入的。可能因为某次跨越升级,或者升级不完善,或者恢复了老的数据库,导致我的表这个地方没有update-plugin这一项,自己添加上应该就ok了。
解决方案
知道了问题所在之后,解决起来自然是相当简单。
1.进入phpmyadmin,找到wp_options(默认你的表前缀是wp,如果不是,请去你自己前缀下的options)表下的wp_user_roles,点击该项前面的修改按钮。
2.你会发现这里多个角色的权限分配,不要管后面的,找到b:1;}}s:6:”editor”这样的代码,在这句代码之前插入b:1;s:14:”update_plugins”;b:1;s:14:”delete_plugins”;这样一句代码,理论上问题就该解决。可是事实上,你会发现自己无法进入后台了。别急,还有一步。
3.当时我也比较头痛,为什么理论上能解决问题的方法反倒让自己进不了后台了。想到前面把这个属性比作XML文件的想法,对这些数值那些奇怪的a:5:{s:13一类字符进行了分析。
原来答案很简单,a就是数组,代表后面括号内有多少元素;s当然就是字符串,表示后面引号内的字符串长度;b应该是空格。所以在我们增添了b:1;s:14:”update_plugins”;b:1;s:14:”delete_plugins”;这样一句代码后,事实上是给这个数组增添了2个元素,相应的,我们得去前面修改这个数组的元素数量。
4.找到整个参数中第一句s:12:”capabilities”;a:。将a冒号后面的数字加2即可。比如原本是54,你就改为56。
5.大功告成,快去享受WordPress2.7带来的全新自动升级功能吧!
后记
这个问题从今年9月拖到现在,请教了很多朋友,但谁会想到是这么一个扯淡的问题。如果不花时间自己多Google,研究Codex,分析数据库结构,是无法解决这类尴尬问题的。
所以在这个信息触手可及的时代,求人不如求己,多多动手动脑才是解决问题的王道。

感谢GFW!感谢网监同志!

大家也都知道,本blog在百度做了竞价排名,选择的keyword是‘操你妈’,一直排在第一。
但从百度大量涌来的粪粪让我不胜烦恼。出于原则问题,又不好删他们的留言。所以每日那篇post(点此链接有风险,点击后本站会暂时reset一分钟左右。所以如果没有代理,还是就别点了吧)均有几个新脑残留言出现。怎么说呢,煞风景吧。
今日那篇post有幸得到GFW垂青,直接URL定向封锁。而这种封锁行为是不影响整站的。这意味着那群从百度过来的粪粪就再也无缘我的blog啦!哈哈,真是感谢网监同志们辛勤的劳动,你们的确是为人民保驾护航的好卫士!

[字少图多]迟到的回忆——WordCamp2008

身在北京外,有一个最大的缺陷就是参加完各种聚会后,不能及时更新blog。
昨下午乘着T9列车回到重庆,新生入学讲座弄完又没时间写blog,一直拖到现在才把照片传完。但better late than never,就让我开始回忆我的WordCamp2008吧。
上周一的时候,我还没有参加本届WordCamp的想法。没想到被Scavin同学一蛊惑,心思立马动摇,下山,购票,收拾行装。
经过24小时的摇晃,终于来到了北京,柠檬、Scavin与Maoz同学在三里屯一家Starbucks等我。无奈的是,我遵循了Apple店标注的Google电子地图,而Apple负责标注的人员可能不知道谷歌地图在北京是有漂移现象的。于是我在三里屯晃荡了很久,最终还是靠Maoz亲自出来迎接,方与大部队汇合。
现场还有一位同学是煎蛋游戏版的编辑echo姐姐。五人众在Starbucks稍作休息,便前往Apple体验中心。下图是Scavin同学对着黑莓(此次WC2008Beijing,黑莓是一个避免不了的关键词)反复拍照的过程:

在Apple店里,我、柠檬、Scavin三个kuso男,进行了各种试验。比如用店里的30寸屏幕Mac访问Google然后搜索天安门:

对着Mac的摄像头自拍:

对着真空管低音炮合影:

在30寸屏幕上访问自己的blog,然后互相嘲笑对方的页面设计:

我提议如果能和Twitter failure whale合影就好了。柠檬同学急中生智,输入Twitter.com/503,终于获得大鲸鱼一只:

另外,Apple体验中心的耳机售价不是一般的贵。我的PX100,居然在那要买700元。柠檬的B&O也贵得离谱。
从Apple出来后我们碰上了《北京晚报》的摄影记者,她想拍摄年轻人在三里屯Village活跃的场面,无奈现场都是大叔……于是我们成了她的模特。5个人在三里屯Village前面巨囧的蹦蹦跳跳装年轻,摄影阿姨的快门声一直啪啪个不停。据她说,这是为国庆专题做的准备。希望到时能买到有我们上镜的报纸。(不过据Flypig同学称,以他多年的媒体经验看来,我和柠檬的脸是不可能出现在北京的报纸上的,一看就是外地人。囧rz,这是什么道理!)
之后本来是打算去Feedsky找吕欣欣的,但众人均肚饿了,此时路边的阳光饺子馆仿佛就如奇迹般出现在我们眼前。

一年不到,又来了Feedsky。Feedsky搬家了,这次也算有缘分,见了这办公室最后一面:

晚饭maoz已经和王兴约好了,老乡远骋也在那边等我们。奔赴海内:

感谢王兴老大的招待,那顿饭在北京还算好吃了:

我、柠檬、Junyu都是C家人,而且正好是350D-400D-450D:

那晚一起吃饭的有Google UE部门的Junyu、远骋、柠檬、Scavin、王兴、Maoz、煎蛋黑帮N人。下图是杨光和煎蛋黑帮:

当晚找酒店,让Scavin和柠檬二人很痛苦,详情请询问当事人。第二日很早就爬起来,赶赴清华西阶讲堂:

WordCamp会议内容就不多说了,反正我们的目的也仅仅是聚会而已,流程可以移步这篇blog,我贴点现场代表性照片就成:

早上的内容有点boring,幸好曙光同学在Google分析那个panel再次发威,现场气氛出现一个小高潮:

中午去清华食堂吃的会议餐,那个餐劵很诡异,居然还有二维码,而且是长方形的。现场询问N人,无一人见过此类条形码,于是被我们判断为主办方的装饰方案:

饭菜还算不错,你看,Matt也吃得很开心:

下午回到会场,就没怎么听里面的内容了,一大帮人在外面扯淡。和flypig还是互相调侃;AW则是专家身份,不断有人向他提问;shizhao老师换了一艺术家头型,成为本场亮点;Caiwangqin继续走技术路线,和他谈了一些职业发展的事;曙光送了件BOB的Tee给我,左图是现场照,右图是回学校后照的:

手上有一张曙光与爱枣报彭毅的照片,众人一致鉴定:两人一个磨子印出来的

作为参加了本次WordCamp的人,要是不贴下面这张照片,貌似会被人鄙视的:

WordCamp结束后,在讲堂门前合影。曙光拿着别人的相机,动作还算专业;歪脖同学拿着未知名相机,很囧的拍了一张:

柠檬与美女主持的囧照:(应柠檬同学要求,图片被和谐)
我和柠檬都想打劫Paveo:

合影后,主办方安排大家去了清华一个咖啡厅继续讨论。腐败的黑莓控,被曙光拉出去合影:

这届WordCamp或多或少有那么些遗憾,但还是要感谢主办团队:

(我承认,其实我只是想贴美女主持而已……)
shizhao老师的艺术家发型,一定得来一张:

晚餐时,去了清华门外的干锅居。对于一个重庆人来说,干锅是一种再普通不过的路边食物,到了北京就进正式餐馆了。披上一张皮,还是一样的味道嘛,就是名字取得囧了点(不要哪都来山寨嘛):

饭后大家如约来到詹膑老师的奇遇花园咖啡馆,认识了漫步roamlog:

详细的奇遇花园记可以移步詹膑老师的blog。
实在写不下去了……大合照结束吧: