wordpress下解决godaddy免费空间feed出错的问题
问题描述:
在浏览器里打开feed地址,不能像正常的feed订阅那样出来订阅的页面,在firefox下是直接以纯文本形式显示,IE7下显示“已取消到该网页的导航”,而直接通过google reader等倒是能正常订阅。在Feed Validator上检查feed文件的正确性,问题如下:
This feed does not validate.
line 1, column 1: Blank line before XML declaration [help]
line 42, column 1: XML parsing error::42:1: not well-formed (invalid token) [help]
虽然对于我这blog来说feed订阅这东西短期内基本上是拿来摆设的,不过有这问题心里总是不爽,于是乎网上搜寻解决办法,皇天不负有心人,最后顺利解决问题了,下面就介绍一下我的解决方法(方法非原创,参考了SAM LESHER)。
先说说引起这个问题的原因:godaddy的免费空间(CreatingDrew),因为godaddy会自动加上一段广告代码,所以在feed的XML文件输出时也在文件的最后两行给加上了广告代码,并在最前面加了一个空行,这就是上面检查出的问题,所以只要去了这个空行和广告代码就OK了,步骤大致如下:
1. 根据wordpress输出feed的默认地址下载feed文件到本地,这个文件是包含广告代码的
2. 写脚本,使用sed对文件进行过滤,把开头的空行和广告给删除掉
3. 通过修改后的feed文件输出feed订阅信息
4. 在godaddy管理页面上建一条cron任务,每隔一定时间执行一遍脚本,使更新后的feed地址也是正常的
可以把feed文件下载和过滤都写到一个脚本里,修改feed地址则可以使用插件来完成。
下面是实现脚本:
#!/bin/sh BLOGADDRESS="http://blog.happysa.org" #blog地址,用于下载feed文件 FEEDPATH=/var/www/home/happysa/domains/happysa.org/public_html/feed #下载后的feed文件存放地址,路径根据具体情况修改 FEEDFILE=$FEEDPATH/feed.xml RSSFILE=$FEEDPATH/rss.xml RDFFILE=$FEEDPATH/rdf.xml ATOMFILE=$FEEDPATH/atom.xml COMMENTSFILE=$FEEDPATH/comments.xml #GDSTRING1="</object></layer></span></div></table></body></html><!-- adsok -->" #GDSTRING2="<script language='javascript' src='https://a12.alphagodaddy.com/hosting_ads/gd01.js'></script>" if [ -f $FEEDFILE ]; #删除老的feed文件 then rm -f $FEEDFILE fi wget -q $BLOGADDRESS/feed -O $FEEDFILE #下载feed文件 sed -i '/!-- adsok --/d;/alphagodaddy/d;1d' $FEEDFILE #过滤广告代码和最前面的空行,过滤条件可根据具体情况作改动 sed -i 's/blog.happysa.org\/feed\"\( rel=\"self\" type=\"application\/rss+xml\" \/>\)/feed.happysa.org\/\"\1/' $FEEDFILE #修改订阅地址 if [ -f $RSSFILE ]; then rm -f $RSSFILE fi wget -q $BLOGADDRESS/feed/rss -O $RSSFILE sed -i '/!-- adsok --/d;/alphagodaddy/d;1d' $RSSFILE if [ -f $RDFFILE ]; then rm -f $kRDFFILE fi wget -q $BLOGADDRESS/feed/rdf -O $RDFFILE sed -i '/!-- adsok --/d;/alphagodaddy/d;1d' $RDFFILE if [ -f $ATOMFILE ]; then rm -f $ATOMFILE fi wget -q $BLOGADDRESS/feed/atom -O $ATOMFILE sed -i '/!-- adsok --/d;/alphagodaddy/d;1d' $ATOMFILE sed -i 's/blog.happysa.org\/feed\/atom\" \/>/feed.happysa.org\/atom.xml\" \/>/' $ATOMFILE if [ -f $COMMENTSFILE ]; then rm -f $COMMENTSFILE fi wget -q $BLOGADDRESS/comments/feed -O $COMMENTSFILE sed -i '/!-- adsok --/d;/alphagodaddy/d;1d' $COMMENTSFILE sed -i 's/blog.happysa.org\/feed\/comments\"\( rel=\"self\" type=\"application\/rss+xml\" \/>\)/feed.happysa.org\/comments.xml\"\1/' $COMMENTSFILE
以上代码新建一个脚本feed.sh,在空间下放哪都可以,之后在空间根目录下建立feed文件夹,用于存放feed文件。
好像免费空间没有ssh帐号的,有些东西设置就会麻烦一点,首先要打开ftp客户端登陆后在脚本文件上右击修改属性,使之有可执行权限。接着就是利用cron建立一个自动执行计划,让脚本每隔多少时间执行一次,在Hosting Control Center上Content下的Cron manager,如图:

Create Cron Job,主要是Command,时间勾上Run twice an hour,这样可以更新频繁一点,之后保存。

接下来就是设置feed地址了,只要feed正常了,怎么用就很简单了,网上的方法也很多,比如可以使用wp-feedlocations,安装后在里面设置feed地址

上面有个地方用到空间的绝对路径,查看绝对路径可以利用php的system函数,同时如果没到cron的时间而想手动执行脚本也可以利用这个,并且可以用这个来输出信息进行调试,我的方法是空间下新建一个php文件,如foo.php,写入如下代码:
<?php system("pwd"); system("sh /var/www/home/happysa/domains/happysa.org/public_html/scripts/feed.sh >log 2>&1"); ?>
然后在浏览器里访问http://happysa.org/foo.php,就可以看到绝对路径并手动执行脚本了。

看了,太复杂,懒得去钻研了。
如果能把LIVE WRITER设置一下就好了,这个我感兴趣。
GODDAY这个太不厚道,赠送的免费空间很多功能不正常,我的wordpress后台的动态功能都用不了,包括插入图片、FLASH、音乐,小工具也不可用,FEED也无法更新,也无法离线发布。比较郁闷。
还好,本人需求不高,能凑合。
@邵希杰
虽然我现在用的不是godaddy的免费空间了,不过我记得wordpress的后台基本上是比较正常的,这篇文章里的图片就是当时插入的,只是用的不是flash上传,所以不清楚flash是不是正常,也可能是某些插件冲突了,我最近就因为Use Google Libraries插件导致后台的js代码都失效了。另外关于feed更新、离线发布等,应该就是那段广告代码导致的,引起xml文件解析出错,不嫌麻烦的话可以试试我文中的方法。
我基本放弃了
@邵希杰
不知道godaddy现在的广告脚本怎么样了,解决思路应该是差不多的
楼主,我用的是我xiaosi.me的免费空间装的wordpress,为什么老提示,Your PHP installation appears to be missing the MySQL extension which is required by WordPress.
我都按要求填入了数据库信息了,为什么每次运行安装页面的时候都跳出来上面这个提示呢?请指教,万分感谢。
@xiaosi
是php没有配置好mysql库的支持吧,php.ini里配置的,可以联系一下提供空间的网站管理员或客服
@wuzhez
我的是免费空间,不知道该怎么问客服呀?
@xiaosi
总会有技术支持的吧,或者FAQ、帮助中心什么的
怎么我这里设置了feed.sh自动执行,而且文件也用ftp工具改成777属性了,但是目标目录却没有任何文件被下载到呢?直接访问http://blog.u15s.com/feed是能看到有feed内容的
@Bral
你可以先拿脚本在本地执行一下看,确定一下是不是脚本的问题
额,本地是win,怎么执行啊。
我是完全照搬你的脚本,只是改了路径以及域名的说。feed.sh文件路径是http://blog.u15s.com/feed.sh,博主麻烦下载来帮忙看看,谢了
@Bral
脚本的字符编码方面有点问题,有一些不可见的字符,导致执行的时候失败了。可以重新写一个脚本试试
那应该用什么编码?utf8还是ascii?我这个是直接复制你的这个的,当时保存的时候好像是提示某些字符会丢失
感谢博主的指导。找了个朋友在Ubuntu下重新保存了一次,这下可以正常执行了。这个办法太好用了!
@Bral
过奖了,互相学习
godaddy的免费空间我也花了好多时间弄过,其实感觉支持最好的是emlog,我当初就用这个建过,稍微改下代码,就能几乎完全正常运行,唯一的缺陷就是无法输出RSS,所以没办法,换空间……
什么时候我也来试试这个方法,希望好用……
@天成
已经不用免费空间很久了,不过看前面有人评论说这个方法还是好用的
文章相当详细哦.
无意间又进来了。
博主好!
FTP下载不了GD中的文件是怎么回事?修改权限777后也无法下载。
@shaoxijie
这个倒是没碰到过,而且下载的话并不需要777的权限的,不知道是不是ftp做限制了。可以换种方法,把你要下载的文件放到网站的某个能访问的目录下面,在浏览器里访问下载就可以了
脚本里面这行“FEEDPATH=/var/www/home/happysa/domains/happysa.org/public_html/feed #下载后的feed文件存放地址,路径根据具体情况修改”
这个地址我不知道怎么修改?博主怎么看godaddy.com免费空间文件地址?
如果在wordpress/wp-includes/ 目录修改
feed.php
feed-atom.php
feed-atom-comments.php
feed-rdf.php
feed-rss.php
feed-rss2.php
feed-rss2-comments.php
使得rss feed中剔除掉错误行,是不是也可以呢?
这个我文章最下面有介绍的,用system执行pwd命令就可以了
@addio
这个不知道有没有用,你可以试一下
本来想试试,现在看还是算了