* @バージョン 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] 。 "$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 サイトマップを生成するためのクラス
*
* @バージョン 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] 。 "$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