_ _,今天在成果不錯,完成了網站的三個功能,RSS訂閱,自動寫網站地圖,與路由的配置,好了,現在一 一記錄下來. 一、路由配置 在未設定路由時,路徑是這樣的 [php] http://www.xiuxiandou.com/content/it/13533/硅谷傳奇投資人講述初創企業家易犯的4大錯誤 content =>controller,it=>method,13533=>id,硅谷傳奇投資人講述初創企業家易犯的4大錯誤=>title http://www.xiuxiandou.com/content/it/13533/硅谷傳奇投資人講述初創企業家易犯的4大錯誤 content =>controller,it=>method,13533=>id,硅谷傳奇投資人講述初創企業家易犯的4大錯誤=>title 設置路由後,訪問路徑為: [php] http://www.xiuxiandou.com/content-it-13533-硅谷傳奇投資人講述初創企業家易犯的4大錯誤 http://www.xiuxiandou.com/content-it-13533-硅谷傳奇投資人講述初創企業家易犯的4大錯誤 其它的類似,路徑配置為 [php] /*sitemap使用*/ $route['content-(:any)-(:num)'] = "content/$1/$2"; /*前台頁面顯示路由*/ $route['content-(:any)-(:num)-(:any)'] = "content/$1/$2/$3"; /*RSS訂閱路由*/ $route['feed-rss-(:any)'] = "feed/rss/$1"; /*博客路由*/ $route['blog-(:num)-(:any)'] = "blog/blogview/$1/$2"; $route['blog-blogtypes-(:any)']="blog/blogtypes/$1"; /**留言**/ $route['me'] = "indexs/me"; /**模板**/ $route["template"]="indexs/template"; /**今日更新**/ $route["indexs-(:any)"]="indexs/$1"; /*sitemap使用*/ $route['content-(:any)-(:num)'] = "content/$1/$2"; /*前台頁面顯示路由*/ $route['content-(:any)-(:num)-(:any)'] = "content/$1/$2/$3"; /*RSS訂閱路由*/ $route['feed-rss-(:any)'] = "feed/rss/$1"; /*博客路由*/ $route['blog-(:num)-(:any)'] = "blog/blogview/$1/$2"; $route['blog-blogtypes-(:any)']="blog/blogtypes/$1"; /**留言**/ $route['me'] = "indexs/me"; /**模板**/ $route["template"]="indexs/template"; /**今日更新**/ $route["indexs-(:any)"]="indexs/$1"; 二、RSS 在libraries目錄下創建Rss.php文件,主要負責生成RSS格式的數據內容 [php] <?php if(!defined('BASEPATH')) exit('No direct script access allowed'); /** * Rss */ class Rss{ public function write_rss($in_datas){ $CI=& get_instance(); $CI->load->helper('xml'); $CI->load->helper('text'); $xml_str="<?xml version='1.0' encoding='UTF-8'?>" ."<rss version='2.0' xmlns:content='http://purl.org/rss/1.0/modules/content/' xmlns:wfw='http://wellformedweb.org/CommentAPI/' xmlns:dc='http://purl.org/dc/elements/1.1/' xmlns:atom='http://www.w3.org/2005/Atom' xmlns:sy='http://purl.org/rss/1.0/modules/syndication/' xmlns:slash='http://purl.org/rss/1.0/modules/slash/' >"; if(!emptyempty($in_datas)){ $xml_str.="<channel>" ."<title>".$in_datas["feed_name"]."</title>" ."<atom:link href='".$in_datas["feed_url"]."' rel='self' type='application/rss+xml' />" ."<link>".$in_datas["feed_url"]."</link>" ."<description>".$in_datas["page_description"]."</description>" ."<language>zh-cn</language> " ."<sy:updateFrequency>1</sy:updateFrequency>" ."<sy:updatePeriod>hourly</sy:updatePeriod> " ."<dc:rights>Copyright (C) Xiuxiandou.com. All rights reserved.</dc:rights>" ."<generator>http://www.xiuxiandou.com</generator>"; if(!emptyempty($in_datas["xml_datas"])){ foreach($in_datas["xml_datas"] as $k => $v){ foreach($v as $xml){ $xml_str.=" <item>" ."<title><![CDATA[ ".xml_convert($xml->subject)."]]> </title>" ."<link>".site_url("content-$k-$xml->id-".xml_convert($CI->mytool->get_title($xml->subject)))."</link>" ."<guid>".site_url("content-$k-$xml->id-".xml_convert($CI->mytool->get_title($xml->subject)))."</guid>" ."<description><![CDATA[".character_limiter(xml_convert($xml->message, 600))."]]></description>" ."<pubdate>".date('Y-m-d h:i:s',$xml->dateline)."</pubdate> " ."<author>$xml->url</author>" ."</item>"; } } } $xml_str.="</channel>"; } $xml_str.="</rss>"; return $xml_str; } } <?php if(!defined('BASEPATH')) exit('No direct script access allowed'); /** * Rss */ class Rss{ public function write_rss($in_datas){ $CI=& get_instance(); $CI->load->helper('xml'); $CI->load->helper('text'); $xml_str="<?xml version='1.0' encoding='UTF-8'?>" ."<rss version='2.0' xmlns:content='http://purl.org/rss/1.0/modules/content/' xmlns:wfw='http://wellformedweb.org/CommentAPI/' xmlns:dc='http://purl.org/dc/elements/1.1/' xmlns:atom='http://www.w3.org/2005/Atom' xmlns:sy='http://purl.org/rss/1.0/modules/syndication/' xmlns:slash='http://purl.org/rss/1.0/modules/slash/' >"; if(!empty($in_datas)){ $xml_str.="<channel>" ."<title>".$in_datas["feed_name"]."</title>" ."<atom:link href='".$in_datas["feed_url"]."' rel='self' type='application/rss+xml' />" ."<link>".$in_datas["feed_url"]."</link>" ."<description>".$in_datas["page_description"]."</description>" ."<language>zh-cn</language> " ."<sy:updateFrequency>1</sy:updateFrequency>" ."<sy:updatePeriod>hourly</sy:updatePeriod> " ."<dc:rights>Copyright (C) Xiuxiandou.com. All rights reserved.</dc:rights>" ."<generator>http://www.xiuxiandou.com</generator>"; if(!empty($in_datas["xml_datas"])){ foreach($in_datas["xml_datas"] as $k => $v){ foreach($v as $xml){ $xml_str.=" <item>" ."<title><![CDATA[ ".xml_convert($xml->subject)."]]> </title>" ."<link>".site_url("content-$k-$xml->id-".xml_convert($CI->mytool->get_title($xml->subject)))."</link>" ."<guid>".site_url("content-$k-$xml->id-".xml_convert($CI->mytool->get_title($xml->subject)))."</guid>" ."<description><![CDATA[".character_limiter(xml_convert($xml->message, 600))."]]></description>" ."<pubdate>".date('Y-m-d h:i:s',$xml->dateline)."</pubdate> " ."<author>$xml->url</author>" ."</item>"; } } } $xml_str.="</channel>"; } $xml_str.="</rss>"; return $xml_str; } } 2、RSS控制類 [php] <?php if(!defined('BASEPATH')) exit('No direct script access allowed'); /** * 2013-2-25:RSS訂閱 */ class Feed extends CI_Controller{ public function index(){ $it=$this->mcom_model->query_Bywhere(mymsg::BT_ITINFO,array("riqi"=>$this->mytool->get_ymd())); $game=$this->mcom_model->query_Bywhere(mymsg::BT_GAME,array("riqi"=>$this->mytool->get_ymd())); $blog=$this->mcom_model->query_Bywhere(mymsg::BT_BLOG,array("riqi"=>$this->mytool->get_ymd())); $movie=$this->mcom_model->query_Bywhere(mymsg::BT_MOVIE,array("riqi"=>$this->mytool->get_ymd())); $book=$this->mcom_model->query_Bywhere(mymsg::BT_BOOK,array("riqi"=>$this->mytool->get_ymd())); $in_datas["xml_datas"]=array("it"=>$it,"game"=>$game,"blog"=>$blog,"movie"=>$movie,"book"=>$book); $this->_comm($in_datas); } public function rss(){ $this->load->helper('xml'); $this->load->helper('text'); $key= $this->uri->segment(3); $db_table= $key=="it"?"bt_itinfo":"bt_$key"; $table_exist=$this->mcom_model->table_exists($db_table); if($table_exist){ $in_datas["xml_datas"]=array($key=>$this->mcom_model->query_Bywhere($db_table,array("riqi"=>$this->mytool->get_ymd()))); $this->_comm($in_datas); }else{ show_404(); } } private function _comm($in_datas){ $in_datas['feed_name'] = "休閒豆 RSS"; $in_datas['feed_url'] = base_url()."free"; $in_datas['page_description'] = '休閒豆,IT資訊,IT電子書,游戲種子,電影BT RSS'; $in_datas['creator_email'] = '[email protected]'; $in_datas['page_language']="zh-zn"; $out_datas["xml"]=$this->rss->write_rss($in_datas); header("Content-Type: text/xml"); $this->load->view("rss",$out_datas); } } <?php if(!defined('BASEPATH')) exit('No direct script access allowed'); /** * 2013-2-25:RSS訂閱 */ class Feed extends CI_Controller{ public function index(){ $it=$this->mcom_model->query_Bywhere(mymsg::BT_ITINFO,array("riqi"=>$this->mytool->get_ymd())); $game=$this->mcom_model->query_Bywhere(mymsg::BT_GAME,array("riqi"=>$this->mytool->get_ymd())); $blog=$this->mcom_model->query_Bywhere(mymsg::BT_BLOG,array("riqi"=>$this->mytool->get_ymd())); $movie=$this->mcom_model->query_Bywhere(mymsg::BT_MOVIE,array("riqi"=>$this->mytool->get_ymd())); $book=$this->mcom_model->query_Bywhere(mymsg::BT_BOOK,array("riqi"=>$this->mytool->get_ymd())); $in_datas["xml_datas"]=array("it"=>$it,"game"=>$game,"blog"=>$blog,"movie"=>$movie,"book"=>$book); $this->_comm($in_datas); } public function rss(){ $this->load->helper('xml'); $this->load->helper('text'); $key= $this->uri->segment(3); $db_table= $key=="it"?"bt_itinfo":"bt_$key"; $table_exist=$this->mcom_model->table_exists($db_table); if($table_exist){ $in_datas["xml_datas"]=array($key=>$this->mcom_model->query_Bywhere($db_table,array("riqi"=>$this->mytool->get_ymd()))); $this->_comm($in_datas); }else{ show_404(); } } private function _comm($in_datas){ $in_datas['feed_name'] = "休閒豆 RSS"; $in_datas['feed_url'] = base_url()."free"; $in_datas['page_description'] = '休閒豆,IT資訊,IT電子書,游戲種子,電影BT RSS'; $in_datas['creator_email'] = '[email protected]'; $in_datas['page_language']="zh-zn"; $out_datas["xml"]=$this->rss->write_rss($in_datas); header("Content-Type: text/xml"); $this->load->view("rss",$out_datas); } } 運行 [html] 生成結果如下 [php] <rss xmlns:c xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" versi <channel> <title>休閒豆 RSS</title> <atom:link href="http://www.xiuxiandou.com/free" rel="self" type="application/rss+xml"/> <link>http://www.xiuxiandou.com/free</link> <description>休閒豆,IT資訊,IT電子書,游戲種子,電影BT RSS</description> <language>zh-cn</language> <sy:updateFrequency>1</sy:updateFrequency> <sy:updatePeriod>hourly</sy:updatePeriod> <dc:rights>Copyright (C) Xiuxiandou.com. All rights reserved.</dc:rights> <generator>http://www.xiuxiandou.com</generator> <item> <title> <![CDATA[ 硅谷傳奇投資人講述初創企業家易犯的4大錯誤 ]]> </title> <link> http://www.xiuxiandou.com/content-it-13533-硅谷傳奇投資人講述初創企業家易犯的4大錯誤 </link> <guid> http://www.xiuxiandou.com/content-it-13533-硅谷傳奇投資人講述初創企業家易犯的4大錯誤 </guid> <description> <![CDATA[ <br/><p style="text-align: center;"> <br/><img src=http://www.BkJia.com/uploadfile/2013/0301/20130301022546372.com/&' title='xiuxiandou.com' alt='xiuxiandou.com' target='_blank'/> <br/> </p><br/> <br/><p align="center">Qualys 創始人兼 CEO 菲利普`科爾圖特</p><br/> <br/><p> 北京時間 2 月 25 日消息,據國外媒體報道,美國雲計算安全公司… ]]> </description> <pubdate>2013-02-25 09:18:49</pubdate> <author>http://news.cnblogs.com/n/172129/</author> </item> .... <rss xmlns:c xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" versi <channel> <title>休閒豆 RSS</title> <atom:link href="http://www.xiuxiandou.com/free" rel="self" type="application/rss+xml"/> <link>http://www.xiuxiandou.com/free</link> <description>休閒豆,IT資訊,IT電子書,游戲種子,電影BT RSS</description> <language>zh-cn</language> <sy:updateFrequency>1</sy:updateFrequency> <sy:updatePeriod>hourly</sy:updatePeriod> <dc:rights>Copyright (C) Xiuxiandou.com. All rights reserved.</dc:rights> <generator>http://www.xiuxiandou.com</generator> <item> <title> <![CDATA[ 硅谷傳奇投資人講述初創企業家易犯的4大錯誤 ]]> </title> <link> http://www.xiuxiandou.com/content-it-13533-硅谷傳奇投資人講述初創企業家易犯的4大錯誤 </link> <guid> http://www.xiuxiandou.com/content-it-13533-硅谷傳奇投資人講述初創企業家易犯的4大錯誤 </guid> <description> <![CDATA[ <br/><p style="text-align: center;"> <br/><img src=http://www.BkJia.com/uploadfile/2013/0301/20130301022546372.com/&' title='xiuxiandou.com' alt='xiuxiandou.com' target='_blank'/> <br/> </p><br/> <br/><p align="center">Qualys 創始人兼 CEO 菲利普`科爾圖特</p><br/> <br/><p> 北京時間 2 月 25 日消息,據國外媒體報道,美國雲計算安全公司… ]]> </description> <pubdate>2013-02-25 09:18:49</pubdate> <author>http://news.cnblogs.com/n/172129/</author> </item> .... 3、網站地圖 網站地圖主要根據sitemaps.xml協議拼寫的XML,協議地址:http://www.sitemaps.org/protocol.html 1、加載libraries目錄下的sitemaps.php類,內容如下 [php] <?php if (!defined('BASEPATH')) exit('No direct script access allowed'); /** * A class for generating XML sitemaps * * @author Philipp Dörner <[email protected]> * @version 0.7 * @access public * @package sitemaps */ class Sitemaps { var $items = array(); function Sitemaps() { $CI =& get_instance(); $CI->config->load('sitemaps'); } /** * Adds a new item to the urlset * * @param array $new_item * @access public */ function add_item($new_item) { $this->items[] = $new_item; } /** * Adds an array of items to the urlset * * @param array $new_items array of items * @access public */ function add_item_array($new_items) { $this->items = array_merge($this->items, $new_items); } /** * Generates the sitemap XML data * * @param string $file_name (optional) if file name is supplied the XML data is saved in it otherwise returned as a string * @param bool $gzip (optional) compress sitemap, overwrites config item 'sitemaps_gzip' * @access public * @return string */ function build($file_name = null, $gzip = NULL) { $CI =& get_instance(); $map = $CI->config->item('sitemaps_header') . "\n"; foreach($this->items as $item) { $item['loc'] = htmlentities($item['loc'], ENT_QUOTES); $map .= "\t<url>\n\t\t<loc>" . $item['loc'] . "</loc>\n"; $attributes = array("lastmod", "changefreq", "priority"); foreach($attributes AS $attr) { if(isset($item[$attr])) { $map .= "\t\t<$attr>" . $item[$attr] . "</$attr>\n"; } } $map .= "\t</url>\n\n"; } unset($this->items); $map .= $CI->config->item('sitemaps_footer'); if( ! is_null($file_name)) { $fh = fopen($file_name, 'a');//w fwrite($fh, $map); fclose($fh); if($CI->config->item('sitemaps_filesize_error') && filesize($file_name) > 1024 * 1024 * 30) { show_error('Your sitemap is bigger than 10MB, most search engines will not accept it.'); } if($gzip OR (is_null($gzip) && $CI->config->item('sitemaps_gzip'))) { $gzdata = gzencode($map, 9); $file_gzip = str_replace("{file_name}", $file_name, $CI->config->item('sitemaps_gzip_path')); $fp = fopen($file_gzip, "a");//w fwrite($fp, $gzdata); fclose($fp); // Delete the uncompressed sitemap unlink($file_name); return $file_gzip; } return $file_name; } else { return $map; } } /** * Generate a sitemap index file pointing to other sitemaps you previously built * * @param array $urls array of urls, each being an array with at least a loc index * @param string $file_name (optional) if file name is supplied the XML data is saved in it otherwise returned as a string * @param bool $gzip (optional) compress sitemap, overwrites config item 'sitemaps_gzip' * @access public * @return string */ function build_index($urls, $file_name = null, $gzip = null) { $CI =& get_instance(); $index = $CI->config->item('sitemaps_index_header') . "\n"; foreach($urls as $url) { $url['loc'] = htmlentities($url['loc'], ENT_QUOTES); $index .= "\t<sitemap>\n\t\t<loc>" . $url['loc'] . "</loc>\n"; if(isset($url['lastmod'])) { $index .= "\t\t<lastmod>" . $url['lastmod'] . "</lastmod>\n"; } $index .= "\t</sitemap>\n\n"; } $index .= $CI->config->item('sitemaps_index_footer'); if( ! is_null($file_name)) { $fh = fopen($file_name, 'w'); fwrite($fh, $index); fclose($fh); if($CI->config->item('sitemaps_filesize_error') && filesize($file_name) > 1024 * 1024 * 10) { show_error('Your sitemap index is bigger than 10MB, most search engines will not accept it.'); } if($gzip OR (is_null($gzip) && $CI->config->item('sitemaps_index_gzip'))) { $gzdata = gzencode($index, 9); $file_gzip = str_replace("{file_name}", $file_name, $CI->config->item('sitemaps_index_gzip_path')); $fp = fopen($file_gzip, "w"); fwrite($fp, $gzdata); fclose($fp); // Delete the uncompressed sitemap index unlink($file_name); return $file_gzip; } return $file_name; } else { return $index; } } /** * Notify search engines of your updates sitemap * * @param string $url_xml absolute URL of your sitemap, use Codeigniter's site_url() * @param array $search_engines array of search engines to ping, see config file for notes * @access public * @return array HTTP reponse codes */ function ping($url_xml, $search_engines = NULL) { $CI =& get_instance(); if(is_null($search_engines)) { $search_engines = $CI->config->item('sitemaps_search_engines'); } $statuses = array(); foreach($search_engines AS $engine) { $status = 0; if($fp = @fsockopen($engine['host'], 80)) { $engine['url'] = emptyempty($engine['url']) ? "/ping?sitemap=" : $engine['url']; $req = 'GET ' . $engine['url'] . urlencode($url_xml) . " HTTP/1.1\r\n" . "Host: " . $engine['host'] . "\r\n" . $CI->config->item('sitemaps_user_agent') . "Connection: Close\r\n\r\n"; fwrite($fp, $req); while( ! feof($fp)) { if(@preg_match('~^HTTP/\d\.\d (\d+)~i', fgets($fp, 128), $m)) { $status = intval($m[1]); break; } } fclose($fp); } $statuses[] = array("host" => $engine['host'], "status" => $status, "request" => $req); } if($CI->config->item('sitemaps_log_http_responses') OR $CI->config->item('sitemaps_debug')) { foreach($statuses AS $reponse) { $message = "Sitemaps: " . $reponse['host'] . " responded with HTTP status " . $reponse['status']; if($CI->config->item('sitemaps_log_http_responses')) { $level = $reponse['status'] == 200 ? 'debug' : 'error'; log_message($level, $message); } if($CI->config->item('sitemaps_debug')) { echo "<p>" . $message . " after request:</p>\n<pre>" . $reponse['request'] . "</pre>\n\n"; } } } return $statuses; } } <?php if (!defined('BASEPATH')) exit('No direct script access allowed'); /** * A class for generating XML sitemaps * * @author Philipp Dörner <[email protected]> * @version 0.7 * @access public * @package sitemaps */ class Sitemaps { var $items = array(); function Sitemaps() { $CI =& get_instance(); $CI->config->load('sitemaps'); } /** * Adds a new item to the urlset * * @param array $new_item * @access public */ function add_item($new_item) { $this->items[] = $new_item; } /** * Adds an array of items to the urlset * * @param array $new_items array of items * @access public */ function add_item_array($new_items) { $this->items = array_merge($this->items, $new_items); } /** * Generates the sitemap XML data * * @param string $file_name (optional) if file name is supplied the XML data is saved in it otherwise returned as a string * @param bool $gzip (optional) compress sitemap, overwrites config item 'sitemaps_gzip' * @access public * @return string */ function build($file_name = null, $gzip = NULL) { $CI =& get_instance(); $map = $CI->config->item('sitemaps_header') . "\n"; foreach($this->items as $item) { $item['loc'] = htmlentities($item['loc'], ENT_QUOTES); $map .= "\t<url>\n\t\t<loc>" . $item['loc'] . "</loc>\n"; $attributes = array("lastmod", "changefreq", "priority"); foreach($attributes AS $attr) { if(isset($item[$attr])) { $map .= "\t\t<$attr>" . $item[$attr] . "</$attr>\n"; } } $map .= "\t</url>\n\n"; } unset($this->items); $map .= $CI->config->item('sitemaps_footer'); if( ! is_null($file_name)) { $fh = fopen($file_name, 'a');//w fwrite($fh, $map); fclose($fh); if($CI->config->item('sitemaps_filesize_error') && filesize($file_name) > 1024 * 1024 * 30) { show_error('Your sitemap is bigger than 10MB, most search engines will not accept it.'); } if($gzip OR (is_null($gzip) && $CI->config->item('sitemaps_gzip'))) { $gzdata = gzencode($map, 9); $file_gzip = str_replace("{file_name}", $file_name, $CI->config->item('sitemaps_gzip_path')); $fp = fopen($file_gzip, "a");//w fwrite($fp, $gzdata); fclose($fp); // Delete the uncompressed sitemap unlink($file_name); return $file_gzip; } return $file_name; } else { return $map; } } /** * Generate a sitemap index file pointing to other sitemaps you previously built * * @param array $urls array of urls, each being an array with at least a loc index * @param string $file_name (optional) if file name is supplied the XML data is saved in it otherwise returned as a string * @param bool $gzip (optional) compress sitemap, overwrites config item 'sitemaps_gzip' * @access public * @return string */ function build_index($urls, $file_name = null, $gzip = null) { $CI =& get_instance(); $index = $CI->config->item('sitemaps_index_header') . "\n"; foreach($urls as $url) { $url['loc'] = htmlentities($url['loc'], ENT_QUOTES); $index .= "\t<sitemap>\n\t\t<loc>" . $url['loc'] . "</loc>\n"; if(isset($url['lastmod'])) { $index .= "\t\t<lastmod>" . $url['lastmod'] . "</lastmod>\n"; } $index .= "\t</sitemap>\n\n"; } $index .= $CI->config->item('sitemaps_index_footer'); if( ! is_null($file_name)) { $fh = fopen($file_name, 'w'); fwrite($fh, $index); fclose($fh); if($CI->config->item('sitemaps_filesize_error') && filesize($file_name) > 1024 * 1024 * 10) { show_error('Your sitemap index is bigger than 10MB, most search engines will not accept it.'); } if($gzip OR (is_null($gzip) && $CI->config->item('sitemaps_index_gzip'))) { $gzdata = gzencode($index, 9); $file_gzip = str_replace("{file_name}", $file_name, $CI->config->item('sitemaps_index_gzip_path')); $fp = fopen($file_gzip, "w"); fwrite($fp, $gzdata); fclose($fp); // Delete the uncompressed sitemap index unlink($file_name); return $file_gzip; } return $file_name; } else { return $index; } } /** * Notify search engines of your updates sitemap * * @param string $url_xml absolute URL of your sitemap, use Codeigniter's site_url() * @param array $search_engines array of search engines to ping, see config file for notes * @access public * @return array HTTP reponse codes */ function ping($url_xml, $search_engines = NULL) { $CI =& get_instance(); if(is_null($search_engines)) { $search_engines = $CI->config->item('sitemaps_search_engines'); } $statuses = array(); foreach($search_engines AS $engine) { $status = 0; if($fp = @fsockopen($engine['host'], 80)) { $engine['url'] = empty($engine['url']) ? "/ping?sitemap=" : $engine['url']; $req = 'GET ' . $engine['url'] . urlencode($url_xml) . " HTTP/1.1\r\n" . "Host: " . $engine['host'] . "\r\n" . $CI->config->item('sitemaps_user_agent') . "Connection: Close\r\n\r\n"; fwrite($fp, $req); while( ! feof($fp)) { if(@preg_match('~^HTTP/\d\.\d (\d+)~i', fgets($fp, 128), $m)) { $status = intval($m[1]); break; } } fclose($fp); } $statuses[] = array("host" => $engine['host'], "status" => $status, "request" => $req); } if($CI->config->item('sitemaps_log_http_responses') OR $CI->config->item('sitemaps_debug')) { foreach($statuses AS $reponse) { $message = "Sitemaps: " . $reponse['host'] . " responded with HTTP status " . $reponse['status']; if($CI->config->item('sitemaps_log_http_responses')) { $level = $reponse['status'] == 200 ? 'debug' : 'error'; log_message($level, $message); } if($CI->config->item('sitemaps_debug')) { echo "<p>" . $message . " after request:</p>\n<pre>" . $reponse['request'] . "</pre>\n\n"; } } } return $statuses; } } 2、sitemap.php控制類,注意這裡不要與libraries中的sitemaps.php同名,不然會報錯的. <?php if(!defined('BASEPATH')) exit('No direct script access allowed'); /** * 2013-2-25:網站地圖 */ class Sitemap extends CI_Controller{ public function index(){ $file_name =$this->write_xml(); redirect(site_url($file_name)); } public function write_xml(){ $it=$this->mcom_model->query_Bywhere(mymsg::BT_ITINFO,array("riqi"=>$this->mytool->get_ymd())); $game=$this->mcom_model->query_Bywhere(mymsg::BT_GAME,array("riqi"=>$this->mytool->get_ymd())); $blog=$this->mcom_model->query_Bywhere(mymsg::BT_BLOG,array("riqi"=>$this->mytool->get_ymd())); $movie=$this->mcom_model->query_Bywhere(mymsg::BT_MOVIE,array("riqi"=>$this->mytool->get_ymd())); $book=$this->mcom_model->query_Bywhere(mymsg::BT_BOOK,array("riqi"=>$this->mytool->get_ymd())); $in_datas["xml_datas"]=array("it"=>$it,"game"=>$game,"blog"=>$blog,"movie"=>$movie,"book"=>$book); $file_name="sitemap.xml"; if(!emptyempty($in_datas["xml_datas"])){ foreach($in_datas["xml_datas"] as $k => $v){ foreach($v as $xml){ $item = array( "loc" => site_url("content-$k-$xml->id"), "lastmod" => date('Y-m-d',$xml->dateline), "changefreq" => "hourly", "priority" => "0.8" ); $this->sitemaps->add_item($item); } } $file_name = $this->sitemaps->build("sitemap.xml"); } return $file_name; } }