采集时提示读取网址失败
DEDECMS 设置采集规则时,保存测试时,提示读取测试网址失败,不能下载远程图片和资源,不能提取缩略图,是因为服务器上禁用了fsockopen() 与pfsockopen() 函数造成的,在用fsockopen()或fsockopen() 的地方用 stream_socket_client()代替就可以了。
具体修改地方是: /include/dedehttpdown.class.php 第507行
$this->m_fp = @fsockopen($this->m_host, $this->m_port, $errno, $errstr,10);
替换为
$this->m_fp = @stream_socket_client($this->m_host . ':' . $this->m_port, $errno, $errstr,10);
确定服务器是否禁用了fsockopen() 与pfsockopen() 函数,可以使用PHP探针查看服务器的信息,信息中会明确显示是否禁用了这两个函数的。
采集文章时相对路径问题
问题描述:
当采集目标文章中列表或者分页信息是绝对路径时,DEDE可以正确采集,例如:(jiaook.com/2012/331.html这样文章可以正确采集。
当采集目标文章中列表或者分页信息是相对路径,但是以 ‘/’开头(如 /2012/0328/1943.html)DEDE也可以正确采集。
当采集目标文章中列表或者分页信息是相对路径,但不是以 ‘/’开头(如 2012/0328/1943.html)DEDE就不能正确采集了。
这在我们平时做站的时候,涉及到SEO的一个问题,就是URL标准化,详细可以看看另一篇博文:SEO:什么是URL的标准化?
解决方案:
问题的根源出在 dedehtml2.class.php 中的 FillUrl 函数上,大概在394行左右:
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; //替换为这一句
}