Created
February 9, 2015 18:31
-
-
Save iGlitch/2708642436b04deda34a to your computer and use it in GitHub Desktop.
UpdateRSS
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
IndexUpdaterのRSSバージョンです。 | |
サイトの更新記録などにお使いください。 | |
RSS2.0対応のRSSファイルを更新と同時に作成します。 | |
--enable-mbstringが入ってないとRSSファイルのUTF-8変換が出来ません | |
設置方法 | |
空のファイル「new.txt」「index.xml」が無ければ作成します | |
本体といっしょにアップロードします | |
new.txt、index.xmlのパーミッション(実行権限)を606にします | |
使用するページでテーブル等を作成してから、<?include("update.php");?>を挿入します。 | |
デザインは自由に変更してください。 そのページも*.phpじゃないと動きません | |
*/ | |
/*---------設定-----------*/ | |
$logmax = 10; // ログ記録最大行、RSS出力記事数 | |
$viewmax = 3; // 表示件数 | |
$descmax = 500; // 概要での制限文字バイト数 | |
$logfile = "newrss.txt"; // ログファイル名 | |
$pwd = "0123"; // 投稿パスワード(変更してください | |
// RSSに出力するサイト情報 | |
$ch_title = "レッツPHP!"; | |
$ch_link = "http://glitchery.jp"; | |
$ch_desc = "PHPの色々なスクリプトを配布してます。掲示板・チャット・アクセス解析など"; | |
/*------------------------*/ | |
// 古いバージョンのPHPに対応させる | |
if (phpversion() < "4.1.0") { | |
$_SERVER = $HTTP_SERVER_VARS; | |
$_POST = $HTTP_POST_VARS; | |
} | |
// 最初にファイルを読み込み、配列に代入 | |
$lines = file($logfile); | |
//ヘッダ表示 | |
if($_SERVER['QUERY_STRING']){ | |
echo "<html><body>"; | |
//外部ファイルを使う場合 | |
//include("header.html"); | |
} | |
// ?に続く文字で各モードに分岐 | |
switch ($_SERVER['QUERY_STRING']) { | |
// すべての新着情報表示 | |
case 'all': | |
echo "<hr size=1><h2>すべての新着情報</h2><br><blockquote>"; | |
// 配列の先頭から、配列の終わりまでループ | |
for($i = 0; $i < count($lines); $i++) { | |
// 配列の$i行目を「<>」で各変数に分解 | |
list($update, $title, $link, $desc) = explode("<>", $lines[$i]); | |
// UNIXタイムを日にちにフォーマット | |
$update = date("Y/m/d", $update); | |
// HTMLに整形して表示 | |
echo "■<a href='$link'>$title</a> ($update)<br>$desc<br>"; | |
} | |
// 管理モードへのリンクを張る | |
echo "</blockquote><br><div align=right><a href='?adm'>管理</a></div>"; | |
break; | |
// パス入力・投稿画面表示 | |
case 'adm': | |
// POSTフォームからのパスを変数に代入 | |
$pass = $_POST['pass']; | |
// パスが空でなく、パスが違う場合はエラーを表示 | |
if (!empty($pass) && $pass !== $pwd) die("パスワードが違うよ"); | |
echo "<table width=100%><tr><th bgcolor=ffed83>管理モード</font></th></tr></table>"; | |
// パスが空の場合はパス入力フォーム表示 | |
if (empty($pass)) { | |
echo <<<PASS | |
<P><center><h4>パスワードを入力して下さい</h4> | |
<form action="?adm" method=POST> | |
0123 | |
<input type=password name=pass size=8> | |
<input type=submit value=" 認 証 "></form></center> | |
PASS; | |
} | |
// それ以外の場合は、投稿フォームを表示 | |
else { | |
echo <<<FORM | |
<form action="?reg" method=POST><table width=400 align=center> | |
<tr><td colspan=2 align=center><h4>新着情報をいれてください。</h4></td></tr> | |
<tr><td>タイトル</td><td><input type=text name="title" size=50></td></tr> | |
<tr><td>U R L</td><td><input type=text name="link" size=50 value="http://"></td></tr> | |
<tr><td>概 要</td><td><textarea name="desc" cols=45 rows=3></textarea></td></tr> | |
<tr><td colspan=2 align=center><input type=submit value=" 更 新 "><input type=reset value="クリア"> | |
</form></td></tr></table> | |
FORM; | |
} | |
break; | |
// ログ更新・RSS作成処理 | |
case 'reg': | |
function sanitize($str) { | |
$str = str_replace(array("&","<",">","\""), array("&","<",">","""), $str); | |
return $str; | |
} | |
// 余分なクォート文字を取り除く | |
if (get_magic_quotes_gpc()) { | |
$_POST = array_map("stripslashes", $_POST); | |
} | |
$post = array_map("sanitize", $_POST); | |
// 変数に入れ直す | |
$title = $post['title']; | |
$link = $post['link']; | |
$desc = $post['desc']; | |
// タイトルは必須にする | |
if(empty($title)) die("タイトルを入力してください"); | |
// URLも必須にする | |
if (!eregi("^http://", $link)) die("URLを入力してください"); | |
// 制限文字数チェック | |
if (strlen($desc) > $descmax) die("文字数をオーバーしています"); | |
// 改行文字を\nに統一する | |
$desc = str_replace("\r\n", "\r", $desc); | |
$desc = str_replace("\r", "\n", $desc); | |
// \nを<br> に変換する | |
$desc = str_replace("\n", "<br> ", $desc); | |
// 新データを<>でつなげる。最後に改行 | |
$new_item = time()."<>".$title."<>".$link."<>".$desc."<>\n"; | |
// ログ配列の先頭に加える | |
array_unshift($lines, $new_item); | |
// 余分なログを削除 | |
$output = array_slice($lines, 0, $logmax); | |
// ログを更新 | |
$fp = fopen($logfile , "w"); //書き込みモードでオープン | |
flock($fp, LOCK_EX); //ファイルロック | |
fputs($fp, implode("", $output)); //配列を結合して書き込む | |
fclose($fp); | |
// RSSを作成 | |
$rss = <<<RSS_HEAD | |
<?xml version="1.0" encoding="UTF-8" ?> | |
<rss version="2.0"> | |
<channel> | |
<title>$ch_title</title> | |
<link>$ch_link</link> | |
<description>$ch_desc</description> | |
<language>ja</language>\n | |
RSS_HEAD; | |
// 配列を展開 | |
foreach ($lines as $item) { | |
// 各変数に分割 | |
list($update, $title, $link, $desc) = explode("<>", $item); | |
// UNIXタイムをRFC822形式の書式に変換 | |
$pubdate = date("r", $update); | |
// 概要からタグを除去 | |
$desc = strip_tags($desc); | |
// 変数$rssに追加していく | |
$rss .= <<<ITEM | |
<item> | |
<title>$title</title> | |
<link>$link</link> | |
<description>$desc</description> | |
<pubDate>$pubdate</pubDate> | |
</item>\n | |
ITEM; | |
} | |
$rss .= <<<RSS_FOOT | |
</channel> | |
</rss> | |
RSS_FOOT; | |
// UTF-8に変換 | |
$rss = mb_convert_encoding($rss, "UTF-8", "SJIS"); | |
// RSSファイルを作成 | |
$fp = fopen("index.xml" , "w"); | |
flock($fp, LOCK_EX); | |
fputs($fp, $rss); | |
fclose($fp); | |
echo " - 更新完了 - <hr size=1>"; | |
// 最新の新着情報表示 | |
default: | |
// ログ行数が表示件数に満たない場合は、ログ行数分表示 | |
if (count($lines) < $viewmax) $viewmax = count($lines); | |
// 配列の先頭から、$viewmaxまで取り出す | |
for($i = 0; $i < $viewmax; $i++) { | |
// 配列の$i行目を「<>」で各変数に分解 | |
list($update, $title, $link, $desc) = explode("<>", $lines[$i]); | |
// UNIXタイムを日にちにフォーマット | |
$update = date("Y/m/d", $update); | |
// HTMLに整形して表示 | |
echo "■<a href='$link'>$title</a> ($update)<br>$desc<br>"; | |
} | |
// すべての新着情報にリンクを張る | |
echo "<div align=right><a href='updaterss.php?all'>>></a></div>"; | |
} | |
// フッタ表示 | |
if($_SERVER['QUERY_STRING']){ | |
echo "<hr size=1><div align=right>- <a href=http://glitchery.jp>Updater RSS</a> -</div></body></html>"; | |
//外部ファイルを使う場合 | |
//include("foot.html"); | |
exit; | |
} | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment