June 22, 2007

wp的毛病找到了,竟然在php身上

      前两天我一直在郁闷windows live writer插入大的图片到文章中, 上传到wordpress的博客上就出错, 提示无法上传的问题, 具体见这篇。 经过这两天不懈的努力, 终于找到了毛病的所在, 原来就出在php5的一个preg_replace()函数上。 正是这个函数的bug导致了图片无法上传。

现象

      现象是这样的, 用Windows live writer离线编辑博客文章并发布到wodpress上, 文章中如果插有图片, 这个图片如果太大(>73k), 就会提示图片无法上传而导致发布日志失败。 但如果图片够小(<73k), 日志就能发布成功。 这个问题我以前没有碰到过, 是最近将博客搬到CPH之后才开始有的。 有网上说这个是wlw的问题, 可能wlw是有这个问题, 可我碰到的问题应该不是, 因为我在测试之后发现只有CPH才有这个问题, 其他的如本机和盘古都没有出现类似的情况。

经过

      有了问题总要去查找, 虽然说很困难, 这个就是我的毛病, 我自己都觉得有点烦, 我又不搞这么个电脑。 查找问题我比较笨, 我不知道php有什么比较好的调试方法, 最终只能选择在php文件中插入一些输出语句, 看它是执行到哪步的时候出现了问题中断了的。 我在查找的过程中发现, 离线发文使用的是xmlrpc.php, 这个文件中上传图片的方法跟一般上传图片的方法不同, 而是采用的直接建立文件, 写文件的方式进行的。 最后我用输出语句的方法, 将错误定位到了wp-include/class-IXR.php上, 就在这个文件中有这么一个函数parse(), 里面有一个语句是:

$this->message = preg_replace(’/<\?xml(.*)?\?’.'>/’, ”, $this->message);

正是这句中的preg_replace()语句导致了整个问题的存在。

      原来CPH用的是php5.2.4, 而这个版本的php存在一个preg_replace()的bug, 就是当被替换的字符串大于一定的字节数时, 这个函数最后输出的结果是空串, 可能是哪里溢出了。根据最后的测算, 这个导致输出空串的临界字符长度是100031字节。

解决

      找到了问题, 解决起来就容易多了。

方法一: 可以将图片上传到别的地方, 然后在博客中引用就可以了, 这样也就跟这个没有关系了。

方法二: 可以用别的方法替换这个preg_replace()函数, 不用这个函数总不会出错了吧?

方法三: 我用的就是这个方法, 我把这行给注释掉了, 发现wordpress还可以用, 而且大图片也可以上传了, 可能它还有一套备用的处理方法, 赞。 在哪里处理我就不管了, 注释掉了就ok。

      建一个自己的博客, 真的是很累….

  您喜欢本文吗?即刻订阅"偶爱偶家",精彩文章不再错过!现在就给我们留个话吗?

 

« wordpress发布2.2.1版本 用EssentialPIM安排日程 »
5 responses to "wp的毛病找到了,竟然在php身上"
2007年06月22日

兄弟啊~,用在线编辑器不就不累拉嘛 :)
ps:昨天我的博装了ajax comment插件,我这人废话较多,写了还想写,没准还要改改。上次在你这里连留两贴就是这么来的,这下就好了,也便于admin管理。

[Reply]

iNEVER said:
2007年06月23日

看不懂。。。保存,以后用。。。

你就不能用又拍相册存相片嗷,浪费cph资源~~~

[Reply]

2007年06月23日

真怪,为啥要用又拍相册呢?怎么能称之为浪费资源呢?

[Reply]

枫叶 said:
2007年06月23日

用外联的图总是不爽, 有时候又拍还挺慢的. 小图就用内联的算了, 大图外联. 这样兼顾资源和速度. 嘿嘿

[Reply]

UGGboots said:
2009年11月23日

http://www.6inchboot.com/

UGG boots;cheap UGG;UGG classic

[Reply]

Leave a comment