解决wordpress文章同步微博插件同步图片错误的问题

  WordPress文章同步到各大SNS插件有很多,但是蚊仔使用了很多都无法成功同步图片(其他功能都使用正常),最近在向stariy汇报找bug的进程的时候渐渐理顺了思路,把在困扰了几个月后的今天终于找到了症结所在。于是分享出来(写了详细的排查经过,可能大家看着有些烦,但是我想把每一个排查逻辑写出来,因为整体的逻辑思路我很满意,算是对自己的经历做一个完整记录吧,就当日记了(蚊仔很健忘的╮(╯-╰)╭),大家多多包涵)。

因为全文没有配图,太单调啦,蚊仔不能接受╰(‵□′)╯,来张福利


图为福利,与本文无半毛钱的关系

经过2个晚上排查每一个因素后,终于找到了症结所在。

测试和排查全经过:

3.21
1、使用插件同步没有图片的文章正常(视频同步正常)。在使用插件时必须关闭图片同步功能。
2、文章中直接使用外部图片(即图片放到其他网站上、转载的文章)同步图片正常。
3、文章中的图片直接放到自己的服务器里,同步失败。
4、这些失败的插件都宣称支持同步图片。

从种种表现和各种插件的不同提示错误来看,我觉得:
1、问题并不是处在插件和新浪上(以前认为是是新浪API的问题)
2、服务器上的图片防盗链设置会阻挠同步图片,必须增加个大微博API的地址到白名单(这个已经证实,因为某插件官方帮助中最近提到了这个问题)
3、我增加白名单仍然没见效果,有插件提示无法访问到我wp安装目录上的图片(按理说我设置了白名单应该是能够正常访问的),并提示 [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 403。google资料,MS是php.ini设置的问题,具体问题我忘记了,MS是PHP没有权限捕获文件,必须联系服务器管理员修改(我想这太不现实)
4、搜索各种解决方法(头痛),找到了的这篇文章http://www.guixiandao.com/313,感觉和我们的问题有些出路,因为我并没有安装ck-and-syntaxhighlighter,但也有参考价值。
资料找了半天也没有什么明显的结果,昏昏欲睡,暂时放弃。经过发在了stariy那里,顺便给他的wp_sns_share更新2.5 捧捧场。

3.22晚再战(因为收到了stariy的回信,在给他回复的时候突然觉得昨天的排查测试不完善)
1、关闭服务器↑的 HotLink保护 功能。(因为插件有提示403,万一白名单出错了呢?干脆完全禁用吧。)
2、打开插件的图片同步功能。
3、在文章中放置 自己服务器↑的图片,但图片未在WP安装目录,即普通/public_html目录下。图片同步成功(插件:链接微博,我想Social Medias Connect应该也一样),这也证明了为什么别的网站上的转载图可以同步成功的原因——即自己服务器的防盗图功能阻止了。
4、在文章中放置 自己服务器↑的图片,且图片放在WP安装目录下的/public_html/blog/wp-content/uploads/,同步失败。(插件:链接微博)
5、测试内容和4同样,但测试插件换成Social Medias Connect,同样失败,提示错误:
Warning: file_get_contents(/wp-content/uploads/2012/03/001055rqI.png) [function.file-get-contents],
Warning: Cannot modify header information
这和昨晚的错误比较条目少了很多,一眼看出403错误消失了,也就是说我关闭了HotLink保护 解决了403的问题(即无权访问图片的问题)
另外上面2条错误中提示:file_get_contents错误和 Cannot modify header information错误,查找资料后发现和昨天找到的资料一样,直接症结应该在PHP.ini中的output_buffering默认为off的。
6、打开output_buffering该项,为On。(昨天我走到这步就放弃了,以为PHP设置只能联系服务器提供商,但其实在cPanel中是可以自主设置的,看差眼(泪,果然睡一觉会有新发现)
7、重复 5 的测试,错误提示消失,但图片同步仍然没有成功
8、重复 4 的测试,同样同步失败。
9、从Social Medias Connect 没有提示错误来看,服务器方面的问题应该是没有了,因为一旦服务器有问题,会很直白的做出反应。那么也就是说wp或插件的问题。
10、重新看了昨天找到的资料和相关文章文章http://www.guixiandao.com/313 中提到的ck-and-syntaxhighlighter 造成的图片文件地址发生变化似乎有点关联,因为我安装了CKEditor编辑器,查看文章html编辑模式,看到图片的地址被CK编辑器自动改成了/wp-content/uploads/2012/03/001055rqI.png 这样的相对地址,和文章中提到的问题非常类似,于是在html模式下手工修改图片地址为http://blog.skeeterhouse.com/wp-content/uploads/2012/03/001055rqI.png,然后不切换到图形化编辑模式,直接点击发布、同步。
11、同步成功,找到症结。

总结:
1、HotLink保护 会阻挠API的捕获图片,得到403错误。必须关闭或增加白名单。
2、CK这样的编辑器增强插件会自动修改文章中图片地址为相对链接,但同步插件却不会在同步时自动补充完整的图片地址,造成插件无法找到图片。必须手工切换到html模式 修改图片地址,或不要使用CK的添加和修改图片功能,然后直接发布,或修改CK插件取消自动相对链接的功能,或修改同步插件,增加补充完整的相对链接功能。
3、修改CK,可参考http://www.guixiandao.com/313 一文。
4、修改同步插件在研究中,毕竟取消CK的相对地址功能不是最好的选择。

终于解决问题了,希望能帮到遇到同样问题的人。另外在增加图片同步功能的时候可以吸取这个bug,增加自动补全图片相对地址为绝对地址的功能。

最后stariyファイト!!(´∀‘)

本篇文章已有2条评论

  1. stariy 说:

    好厉害,明天慢慢看,顶一个!

    • 蚊仔 说:

      TAT 泪目,现在同步文章轻松多了

发表评论

电子邮件地址不会被公开。 必填项已用*标注

想显示头像?本站支持Gravatar

Scroll Up