DEDE采集分页文章时相对路径问题解决方案
今天在给我的 好妈妈育儿网采集文章的时候,发现DEDE采集文章分页时的一个bug。
正好今天晚上事情不多,这个小问题也勾起了我程序的职业兴趣。索性开两瓶啤酒,就一盘花生米,一边喝着小酒,一边debug DEDE的代码,最后把这个问题的根源找到并且解决了。
问题描述:
当采集目标文章中分页信息是绝对路径时(如 http://www.gudmama.com/a/tonghuagushi/2 ... 120_2.html)DEDE可以正确采集。
当采集目标文章中分页信息是相对路径,但是以 '/'开头(如 /a/tonghuagushi/20120218/55120_2.html)DEDE也可以正确采集。
当采集目标文章中分页信息是相对路径,但不是以 '/'开头(如 a/tonghuagushi/20120218/55120_2.html)DEDE就不能正确采集了。
解决方案:
问题的根源出在 dedehtml2.class.php 中的 FillUrl 函数上。
大概在394行左右:
[code] if( strlen($surl) < 7 )
{
$okurl = $this->BaseUrlPath.'/'.$surl;
}
else if( strtolower(substr($surl,0,7))=='http://' )
{
$okurl = preg_replace('/^http:\/\//i', '', $surl);
}
else
{
//$okurl = $this->BaseUrlPath.'/'.$surl;
$okurl = $this->HomeUrl.'/'.$surl; //gudmama.com fixed the issue on 2012/03/01
}[/code]
被注释掉的代码是原始的,后面一行是我加上去fix这个问题的。
稍微懂点程序的明眼人一看,就知道原始的程序肯定有问题,第一个if 和最后一个else里面的代码是一样的。
这样肯定没有意义。不知道dede的程序员是怎么review代码的。
今天算义务打工一次,帮dede fix了这个问题。希望能给遇到同样问题的站长提供帮助。