我的站点架在DreamHost上面, 发现基于Lilina的RSS页面中, 不能显示每个订阅的网站的favicon.ico图标, 昨晚研究了一会, 终于搞明白了什么问题, 并改了一下代码搞定这个问题.
问题应当是由DreamHost重新编译或升级了他们的PHP引起的, 在编译过程中他们指定了allow_url_fopen为false, 这样的话PHP函数get_file_contents函数就不能打开url来取得别人网站上的图标了, 通过改成用curl来实现抓取功能就可以了.
打开lib.php文件, 找到channelFavicon函数, 将下面的两行:
if (!($data = @file_get_contents($ico_url)))
$data=$empty_ico_data ;
if (stristr($data,'html')) $data=$empty_ico_data ;
替换为:
$ch = curl_init($ico_url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);
if (!$data) $data=$empty_ico_data ;
if (stristr($data,'html')) $data=$empty_ico_data ;
DreamHost作此改变应当是为安全考虑吧!
留言 (3)
很有参考价值 :)
Posted by Fenng | Nov 30, 2006 10:19 PM
dreamhost 限時促銷,折價$99.99
Posted by 虛擬主機 | Dec 8, 2006 4:16 PM
这个方法不错
Posted by lihuawei | Dec 26, 2006 9:30 PM