<?php
/*---------設定-----------*/
$logmax  10;        // ログ記録最大行、RSS出力記事数
$viewmax 3;        // 表示件数
$descmax 500;        // 概要での制限文字バイト数
$logfile "newrss.txt";    // ログファイル名
$pwd     "0123";    // 投稿パスワード(変更してください

// RSSに出力するサイト情報
$ch_title "レッツPHP!";
$ch_link  "http://php.s3.to/";
$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("&amp;","&lt;","&gt;","&quot;"), $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($lines0$logmax);

  
// ログを更新
  
$fp fopen($logfile "w");        //書き込みモードでオープン
  
flock($fpLOCK_EX);                  //ファイルロック
  
fputs($fpimplode(""$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($fpLOCK_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'>&gt;&gt;</a></div>";
}
// フッタ表示
if($_SERVER['QUERY_STRING']){
  echo 
"<hr size=1><div align=right>- <a href=http://php.s3.to>Updater RSS</a> -</div></body></html>";
  
//外部ファイルを使う場合
  //include("foot.html");
  
exit;
}
?>