にっきちょう

 →日付 <%IN_TITLE%>→題名            <%IN_MESSAGE%>→本文 <%DEL_FORM%>→削除編集ボタン  わかる範囲で変更してください。日付けの色はもうちょっと下の方にあります */ //メイン $main = <<
<%IN_DATE%> <%IN_TITLE%> <%DEL_FORM%>

<%IN_MESSAGE%>

MAIN; //編集・削除ボタン(上の<%DEL_FORM%>部分と置換) $delform = << >編集 ] value=on>削除 DEL; //フッタ $foot = <<

レッツPHP! FOOT; /*------------------------*/ if(phpversion()>="4.1.0"){ extract($_POST); extract($_GET); extract($_SERVER); } $utime = time()+$jisa*3600; $today = getdate($utime); // 日付け表示関数 function day_print($stamp) { $today = getdate($stamp); $youbi = array('日','月','火','水','木','金','土'); // 日付け部分yyyy/mm/dd(曜) http://php.net/strftime $date_out = strftime("%Y/%m/%d(".$youbi[$today[wday]].")", $stamp); // 土曜は青色、日曜は赤色 if ($today[wday]==0) { return "$date_out"; } elseif($today[wday]==6) { return "$date_out"; } return $date_out; } // ソート関数 function day_cmp($a, $b) { list($aa,) = explode("\t", $a); list($bb,) = explode("\t", $b); if ($aa == $bb) return 0; return ($aa > $bb) ? -1 : 1; } // 過去ファイル名 if (ereg("^[0-9]{6}",$logno)) $logfile = $logdir.$logno.$ext; // ファイル読み込み $lines = @file($logfile); usort($lines, "day_cmp"); /* 過去ログ表示モード */ if ($mode=="past") { echo "

過去の日記

日付をクリックすると過去の日記が見られます。

"; //ログディレクトリ走査 $d = dir($logdir); while ($ent = $d->read()) { if (ereg("^[0-9]{6}$ext$", $ent)) $entarr[] = $ent; } $d->close(); if (!is_array($entarr)) die("過去の日記はありません"); //新しいものからソート arsort($entarr); foreach ($entarr as $name) { printf("%1d年%1d月の日記

\n", $PHP_SELF,substr($name, 0, 6),substr($name, 0, 4),substr($name, 4, 2)); } echo <<

レッツPHP! EOA; exit; } /* ログイン */ if ($act) { if ($REQUEST_METHOD != "POST") die("不正な投稿をしないで"); if (!$pass) die("パスワードを入れてください"); if (isset($pass) && $pass != $password) die("パスワードが違うよ"); } switch ($act) { case 'prev': $utime = mktime($today['hours'],date("i"),date("s"),$mon,$day,$year); if (!checkdate($mon, $day, $year)) $err = "日付が有効ではありません"; if (empty($com)) $err="何も入力されてません"; if (empty($sub)) $sub = $mudai; if (get_magic_quotes_gpc()) { $com = stripslashes($com); $sub = stripslashes($sub); } $com = str_replace("\r\n", "\r", $com); $com = str_replace("\r", "\n", $com); $com = str_replace("\n", "
", $com); $com = str_replace("\t", " ", $com); // 置換 $mes = str_replace("<%IN_DATE%>", day_print($utime), $main); $mes = str_replace("<%IN_TITLE%>", $sub, $mes); $mes = str_replace("<%IN_MESSAGE%>", $com, $mes); $mes = str_replace("<%DEL_FORM%>", "", $mes); $sub = htmlspecialchars($sub); $com = htmlspecialchars($com); // プレビュー echo $mes; echo <<

$err
EOB; break; case 'regi': if (get_magic_quotes_gpc()) { $com = stripslashes($com); $sub = stripslashes($sub); } $newline = "$wtime\t$sub\t$com\n"; if ($lineno) { // 編集の場合、同じNoの物と置きかえる $find = false; for ($i = 0; $i < count($lines); $i++) { list($lno,) = explode("\t", $lines[$i]); if ($lno == $lineno) { $lines[$i] = $newline; $find = true; break; } } if ($find == false) die("該当記事が見つかりません"); } else { // ログの先頭に記事追加 array_unshift($lines, $newline); if (count($lines) > $page_def) { for ($j = count($lines); $j > $page_def; $j--) { list($p_wtime,) = explode("\t", $lines[$j-1]); $pastlog = $logdir.date("Ym",$p_wtime).$ext; $pp = @fopen($pastlog, "a") or die("$pastlogの過去ログに書き込めません
パーミッションを確認してください"); flock($pp, LOCK_EX); fputs($pp, $lines[$j-1]); fclose($pp); // 末尾から削除 array_pop($lines); } } } // ログ更新 $fp = fopen($logfile, "w"); flock($fp, LOCK_EX); fputs($fp, implode('', $lines)); fclose($fp); case 'edit': // 「戻る」の時 if (get_magic_quotes_gpc()) { $ecom = stripslashes($ecom); $esub = stripslashes($esub); $ecom = str_replace("
", "\n", $ecom); } // 編集か削除NOが指定された時 $find = false; if (is_array($del) || isset($editno)) { for ($i = 0; $i < count($lines); $i++) { list($e_time,$e_sub,$e_com) = explode("\t", $lines[$i]); if ($del[$e_time] == "on") { $lines[$i] = ""; $find = true; } if ($editno == $e_time) { $etime = $e_time; $esub = $e_sub; $ecom = $e_com; break; } } } // 編集の場合(日付けと改行変換) if (isset($editno)) { $today = getdate($etime); $ecom = str_replace("
", "\n", $ecom); } // 削除の場合(ログ書き直し) if ($find == true) { $fp = fopen($logfile, "w"); flock($fp, LOCK_EX); fputs($fp, implode('', $lines)); fclose($fp); unset($editno); } case 'admin': $title = (isset($editno)) ? "編集" : "新規書き込み"; //書き込みヘッダ echo <<[<<戻る]

$title

EOC; //年のセレクトボックス(±2年) echo "/\n"; //月のセレクトボックス(12-1月) echo "/\n"; //日のセレクトボックス(31-1日) echo "\n"; //書き込みフォーム echo <<

EOD; default: //過去ログ表示の場合、タイトル if ($logno) printf("

%4d年%1d月の日記

\n", substr($logno, 0, 4),substr($logno, 4, 2)); /* 1ページずつ表示 */ if ($page) { $st = ($page-1) * $page_def; } else { $page = 1; $st = 0; } $lines = @file($logfile); usort($lines, "day_cmp"); for ($i = $st; $i < $st+$page_def; $i++) { if($lines[$i]=="") continue; list($wtime, $sub, $com) = explode("\t", $lines[$i]); $mes = str_replace("<%IN_DATE%>", day_print($wtime), $main); $mes = str_replace("<%IN_TITLE%>", $sub, $mes); $mes = str_replace("<%IN_MESSAGE%>", $com, $mes); $form = str_replace("<%NO%>", $wtime, $delform); $mes = ($act) ? str_replace("<%DEL_FORM%>", $form, $mes) : str_replace("<%DEL_FORM%>","",$mes); echo $mes; } // ページング作成 if ($logno && count($lines) > $page_def) { if ($page > 1) $next = sprintf("<< ", $PHP_SELF,$page-1,$logno); for ($i = 1; $i*$page_def < count($lines)+$page_def; $i++) { if ($page == $i) { $next .= " $i "; } else { $next .= " $i "; } } if($i > $page+1) $next .= sprintf(" >>", $PHP_SELF,$page+1,$logno); echo "


[ $page_def 件ずつ表示 : $next ]   [現在の日記へ]"; } echo "


"; // 編集・削除ボタン if ($act) { echo "

"; // 過去へボタンとパス入力欄 } elseif(!$logno) { echo "

"; } } echo $foot; ?>