ホームページ  >  記事  >  バックエンド開発  >  Codeigniter Rss、サイトマップ、ルーティング設定_PHP チュートリアル

Codeigniter Rss、サイトマップ、ルーティング設定_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-14 10:09:081382ブラウズ

_ _、今日はWebサイトのRSS購読、Webサイトマップの自動書き込み、ルーティング設定の3つの機能が完了しましたので、一つずつ記録していきます。

1.ルーティング設定
ルーティングが設定されていない場合、パスは次のようになります
[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]
/*サイトマップの使用*/
$route['content-(:any)-(:num)'] = "コンテンツ/$1/$2";
/*フロントページにルーティングを表示*/
$route['content-(:any)-(:num)-(:any)'] = "コンテンツ/$1/$2/$3";
/*RSS 購読ルート*/
$route['feed-rss-(:any)'] = "フィード/rss/$1";
/*ブログのルーティング*/
$route['blog-(:num)-(:any)'] = "ブログ/ブログビュー/$1/$2";
$route['blog-blogtypes-(:any)']="ブログ/ブログタイプ/$1";
/**メッセージ**/
$route['me'] = "インデックス/私";
/**テンプレート**/
$route["テンプレート"]="インデックス/テンプレート";
/**今日の更新**/
$route["インデックス-(:any)"]="インデックス/$1";
/*サイトマップの使用*/
$route['content-(:any)-(:num)'] = "コンテンツ/$1/$2";
/*フロントページにルーティングを表示*/
$route['content-(:any)-(:num)-(:any)'] = "コンテンツ/$1/$2/$3";
/*RSS 購読ルーティング*/
$route['feed-rss-(:any)'] = "フィード/rss/$1";
/*ブログのルーティング*/
$route['blog-(:num)-(:any)'] = "ブログ/ブログビュー/$1/$2";
$route['blog-blogtypes-(:any)']="blog/blogtypes/$1";
/**メッセージ**/
$route['me'] = "インデックス/私";
/**テンプレート**/
$route["テンプレート"]="インデックス/テンプレート";
/**今日の更新**/
$route["indexs-(:any)"]="インデックス/$1";
2. RSS
ライブラリーディレクトリに Rss.php ファイルを作成します。このファイルは主に RSS 形式でデータコンテンツを生成します
[php]
/** 
* RSS
 */
クラスRSS{
パブリック関数 write_rss($in_datas){
$CI=& get_instance();
$CI->load->helper('xml');
$CI->load->helper('text');
$xml_str=""
."";  
if(!emptyempty($in_datas)){
$xml_str.="<チャンネル>"  
."".$in_datas["feed_name"].""  
.""  
."".$in_datas["feed_url"].""  
."".$in_datas["page_description"].""  
."zh-cn言語>"
."1"  
."毎時 "
."著作権 (C) Xiuxiandou.com。無断複写・転載を禁じます。"  
."http://www.xiuxiandou.com";  
if(!emptyempty($in_datas["xml_datas"])){
foreach($in_datas["xml_datas"] as $k => $v){
foreach($v as $xml){
$xml_str.=" "  
."<![CDATA[ ".xml_convert($xml->subject)."]]> "  
."".site_url("content-$k-$xml->id-".xml_convert($CI->mytool->get_title($xml->件名)))。」 "  
."".site_url("content-$k-$xml->id-".xml_convert($CI->mytool->get_title($xml-> ;件名)))。」 "  
️ GT;」  
."$xml->url"  
."";  
}
}
}
$xml_str.="";  
}
$xml_str.="";  
$xml_str; を返す  
}
}
/**
* RSS
 */
クラスRSS{
パブリック関数 write_rss($in_datas){
$CI=& get_instance();
$CI->load->helper('xml');
$CI->load->helper('text');
$xml_str=""
."";
if(!empty($in_datas)){
$xml_str.="<チャンネル>"
."".$in_datas["feed_name"].""
.""
."".$in_datas["feed_url"].""
."".$in_datas["page_description"].""
."zh-cn言語>"
."1"
."毎時 "
."著作権 (C) Xiuxiandou.com.All Rights Reserved."
."http://www.xiuxiandou.com";
if(!empty($in_datas["xml_datas"])){
foreach($in_datas["xml_datas"] as $k => $v){
foreach($v as $xml){
$xml_str.=" "
."<![CDATA[ ".xml_convert($xml->subject)."]]> "
."".site_url("content-$k-$xml->id-".xml_convert($CI->mytool->get_title($xml->件名)))。」 「
."".site_url("content-$k-$xml->id-".xml_convert($CI->mytool->get_title($xml-> ;件名)))。」
」 ️ GT;「
."".date('Y-m-d h:i:s',$xml->dateline)." "
."";
}
}
}
$xml_str.="";
}
$xml_str.="";
$xml_str;
を返す
}
}
2、RSS制御类
[php]
if(!define('BASEPATH')) exit('直接スクリプト アクセスは許可されません');  
/**
* 2013-2-25:RSS 購読
*/
クラス フィードは CI_Controller を拡張します{
パブリック関数 Index(){
$it=$this->mcom_model->query_Bywhere(mymsg::BT_ITINFO,array("riqi"=>$this->mytool->get_ymd()));  
$game=$this->mcom_model->query_Bywhere(mYSg::BT_GAME,array("riqi"=>$this->mytool->get_ymd()));  
$blog=$this->mcom_model->query_Bywhere(mYSg::BT_BLOG,array("riqi"=>$this->mytool->get_ymd()));  
$movie=$this->mcom_model->query_Bywhere(mYSg::BT_MOVIE,array("riqi"=>$this->mytool->get_ymd()));  
$book=$this->mcom_model->query_Bywhere(mYSg::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);  
}
パブリック関数 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);  
}その他{
show_404();  
}
}
プライベート関数 _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'] = '1963612630@qq.com';  
$in_datas['page_lang']="zh-zn";  
$out_datas["xml"]=$this->rss->write_rss($in_datas);  
header("Content-Type: text/xml");  
$this->load->view("rss",$out_datas);  
}
}
if(!define('BASEPATH')) exit('直接スクリプト アクセスは許可されません');
/**
* 2013-2-25:RSS 購読
*/
クラス フィードは CI_Controller を拡張します{
パブリック関数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(mYSg::BT_BLOG,array("riqi"=>$this->mytool->get_ymd()));
$movie=$this->mcom_model->query_Bywhere(mYSg::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);
}
パブリック関数 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);
}その他{
show_404();
}
}
プライベート関数 _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'] = '1963612630@qq.com';
$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  
 
http://www.xiuxiandou.com/free   
休闲豆,IT资讯,IT電子书,游戏种子,電影BT RSS  
zh-cn言語>  
1  
時間ごと  
著作権 (C) Xiuxiandou.com。すべての著作権は留保されています。  
http://www.xiuxiandou.com   
 
 
 
 
 
http://www.xiuxiandou.com/content-it-13533-硅谷传奇投资人讲述初创計画业家易犯的4大错误
 
 
http://www.xiuxiandou.com/content-it-13533-硅谷传奇投资人讲述初创計画业家易犯的4大错误
 
 


Qualys 創設者兼 CEO、Philippe Cortout



北京時間 2 月 25 日のニュース、海外メディアの報道によると、アメリカのクラウド コンピューティング セキュリティ会社…

]]>
2013-02-25 09:18:49
<著者>http://news.cnblogs.com/n/172129/
....
カジュアルビーンズ RSS
http://www.xiuxiandou.com/free
レジャー豆、IT情報、IT電子書籍、ゲームシーズ、映画BT RSS
zh-cn言語>
1
時間ごと
著作権 (C) Xiuxiandou.com 無断複写・転載を禁じます
http://www.xiuxiandou.com
<リンク>
http://www.xiuxiandou.com/content-it-13533-シリコンバレーの伝説的な投資家が、スタートアップの起業家がよく犯す 4 つの大きな間違いについて語ります
http://www.xiuxiandou.com/content-it-13533-シリコンバレーの伝説的な投資家が、スタートアップの起業家がよく犯す 4 つの大きな間違いについて語ります


Qualys 創設者兼 CEO、Philippe Cortout



北京時間 2 月 25 日のニュース、海外メディアの報道によると、アメリカのクラウド コンピューティング セキュリティ会社...

]]>
2013-02-25 09:18:49
<著者>http://news.cnblogs.com/n/172129/
....
3. サイトマップ
サイト マップは主に、sitemaps.xml プロトコルに従って綴られた XML です。プロトコル アドレス: http://www.sitemaps.org/protocol.html
1. library ディレクトリに sitemaps.php クラスをロードします。内容は次のとおりです
[php]
/** 
* XML サイトマップを生成するためのクラス
*
* @著者 Philipp Dörner  
* @バージョン 0.7
* @アクセス公開
* @パッケージ サイトマップ
 */
クラスサイトマップ
{
var $items = 配列();
関数 Sitemaps()
{
$CI =& get_instance();  
$CI->config->load('sitemaps');  
}
/** 
* URLset に新しい項目を追加します
*
* @param array $new_item
* @access public
     */
関数 add_item($new_item)
{
$this->items[] = $new_item;  
}
/** 
* 項目の配列を URLset に追加します
*
* @param array $new_items 項目の配列
* @access public
     */
関数 add_item_array($new_items)
{
$this->items = array_merge($this->items, $new_items);  
}
/** 
* サイトマップ XML データを生成します
*
* @param string $file_name (オプション) ファイル名が指定された場合は XML データがそのファイルに保存され、それ以外の場合は文字列として返されます
* @param bool $gzip (オプション) サイトマップを圧縮し、構成アイテム 'sitemaps_gzip' を上書きします
* @access public
* @return string
     */
function build($file_name = null, $gzip = NULL)
{
$CI =& get_instance();  
$map = $CI->config->item('sitemaps_header') 。 「ん」;  
foreach($this->items as $item)
{
$item['loc'] = htmlentities($item['loc'], ENT_QUOTES);  
$map .= "tntt" 。 $item['loc'] 。 "n";  
$attributes = array("lastmod", "changefreq", "priority");  
foreach($attributes AS $attr)
{
if(isset($item[$attr]))
{
$map .= "tt<$attr>" 。 $item[$attr] 。 "n";  
}
}
$map .= "tnn";  
}
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('サイトマップが 10MB を超えています。ほとんどの検索エンジンは受け入れられません。');  
}
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);  
// 圧縮されていないサイトマップを削除します
unlink($file_name);  
$file_gzip を返す;  
}
$file_name を返します。  
}
その他
{
$map を返します。  
}
}
/** 
* 以前に作成した他のサイトマップを指すサイトマップ インデックス ファイルを生成します
*
* @param array $urls URL の配列。それぞれは少なくとも loc インデックスを持つ配列です
* @param string $file_name (オプション) ファイル名が指定された場合は XML データがそのファイルに保存され、それ以外の場合は文字列として返されます
* @param bool $gzip (オプション) サイトマップを圧縮し、構成アイテム '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') 。 「ん」;  
foreach($urls as $url)
{
$url['loc'] = htmlentities($url['loc'], ENT_QUOTES);  
$index .= "tntt" 。 $url['loc'] 。 "n";  
if(isset($url['lastmod']))
{
$index .= "tt" 。 $url['lastmod'] 。 "n";  
}
$index .= "tnn";  
}
$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('サイトマップ インデックスが 10MB を超えています。ほとんどの検索エンジンはそれを受け入れません。');  
}
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);  
// 非圧縮のサイトマップ インデックスを削除します
unlink($file_name);  
$file_gzip を返す;  
}
$file_name を返します。  
}
その他
{
$index を返します。  
}
}
/** 
* サイトマップの更新を検索エンジンに通知します
*
* @param string $url_xml サイトマップの絶対 URL、Codeigniter の site_url() を使用します
* @param array $search_engines ping する検索エンジンの配列、メモについては設定ファイルを参照してください
* @access public
* @return 配列 HTTP 応答コード
     */
関数 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.1rn」。  
"ホスト: " . $engine['ホスト'] 。 "rn" 。  
$CI->config->item('sitemaps_user_agent') 。  
"接続: 閉じるrnrn";  
fwrite($fp, $req);  
while( ! feof($fp))
{
if(@preg_match('~^HTTP/d.d (d+)~i', fgets($fp, 128), $m))
{
$status = intval($m[1]);  
休憩。  
}
}
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 = "サイトマップ: " . $response['ホスト'] 。 " HTTP ステータスで応答しました" 。 $response['ステータス'];  
if($CI->config->item('sitemaps_log_http_responses'))
{
$level = $reponse['status'] == 200 ? 'デバッグ' : 'エラー';  
log_message($level, $message);  
}
if($CI->config->item('sitemaps_debug'))
{
echo "

" 。 $メッセージ 。 「リクエスト後:

n
」 。 $response['リクエスト'] 。  "
nn";  
}
}
}
$statuses を返します。  
}
}
/**
* XML サイトマップを生成するためのクラス
*
* @著者 Philipp Dörner
* @バージョン 0.7
* @アクセス公開
* @パッケージ サイトマップ
 */
クラスサイトマップ
{
var $items = array();
関数 Sitemaps()
{
$CI =& get_instance();
$CI->config->load('sitemaps');
}
/**
* URLset に新しい項目を追加します
*
* @param array $new_item
* @access public
     */
関数 add_item($new_item)
{
$this->items[] = $new_item;
}
/**
* 項目の配列を URLset に追加します
*
* @param array $new_items アイテムの配列
* @access public
     */
関数 add_item_array($new_items)
{
$this->items = array_merge($this->items, $new_items);
}
/**
* サイトマップ XML データを生成します
*
* @param string $file_name (オプション) ファイル名が指定された場合は XML データがそのファイルに保存され、それ以外の場合は文字列として返されます
* @param bool $gzip (オプション) サイトマップを圧縮し、構成アイテム 'sitemaps_gzip' を上書きします
* @access public
* @return string
     */
function build($file_name = null, $gzip = NULL)
{
$CI =& get_instance();
$map = $CI->config->item('sitemaps_header') 。 「ん」;
foreach($this->items as $item)
{
$item['loc'] = htmlentities($item['loc'], ENT_QUOTES);
$map .= "tntt" 。 $item['loc'] 。 "n";
$attributes = array("lastmod", "changefreq", "priority");
foreach($attributes AS $attr)
{
if(isset($item[$attr]))
{
$map .= "tt<$attr>" 。 $item[$attr] 。 "n";
}
}
$map .= "tnn";
}
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('サイトマップが 10MB を超えているため、ほとんどの検索エンジンは受け入れられません。');
}
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);
// 非圧縮サイトマップを削除します
unlink($file_name);
$file_gzip;
}
$file_name;
を返す
}
それ以外
{
$map を返す;
}
}
/**
* 以前に構築した他のサイトマップを指すサイトマップ インデックス ファイルを生成します
*
* @param array $urls URL の配列。それぞれは少なくとも loc インデックスを持つ配列です
* @param string $file_name (オプション) ファイル名が指定された場合は XML データがそのファイルに保存され、それ以外の場合は文字列として返されます
* @param bool $gzip (オプション) サイトマップを圧縮し、構成アイテム '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') 。 「ん」;
foreach($urls as $url)
{
$url['loc'] = htmlentities($url['loc'], ENT_QUOTES);
$index .= "tntt" 。 $url['loc'] 。 "n";
if(isset($url['lastmod']))
{
$index .= "tt" 。 $url['lastmod'] 。 "n";
}
$index .= "tnn";
}
$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('サイトマップ インデックスが 10MB を超えています。ほとんどの検索エンジンは受け入れません。');
}
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);
// 非圧縮サイトマップ インデックスを削除します
unlink($file_name);
$file_gzip;
}
$file_name;
を返す
}
それ以外
{
$index;
を返す
}
}
/**
* サイトマップの更新を検索エンジンに通知します
*
* @param string $url_xml サイトマップの絶対 URL。Codeigniter の site_url() を使用します
* @param array $search_engines ping する検索エンジンの配列、メモについては設定ファイルを参照してください
* @access public
* @return 配列 HTTP 応答コード
     */
関数 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.1rn」 .
"ホスト: " . $engine['ホスト'] 。 「ん」
$CI->config->item('sitemaps_user_agent') .
"接続: 閉じるrnrn";
fwrite($fp, $req);
while( ! feof($fp))
{
if(@preg_match
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。