かんたん作成【HTML CSS JavaScript PHP CGI Perl Ruby Python .htaccess】

掲示板

<?php

//================================================ 設定
$FILE        = './dat/bbs.dat';    // 書き込み保存ファイル
$MAX        = 100;            // 保存件数
$VIEW        = 10;            // 1ページの表示件数
$TEXTMAX    = 1000;            // 本文文字数制限(全角)
$NAMEMAX    = 10;            // 名前文字数制限(全角)
$TITLEMAX    = 20;            // 題名文字数制限(全角)
$PASSWORD    = '1234';        // 削除用パスワード

//================================================ 関数
function readLog($FILE){
    $log = array();
    if(!($file = fopen($FILE, "r"))) {
        return;
    }
    flock($file, LOCK_SH);
    for($i = 0 ; !feof($file) ; $i++) {
        $log[$i] = rtrim(fgets($file), "\n");
    }
    flock($file, LOCK_UN);
    fclose($file);
    if($log[count($log) - 1] === "") {
        array_pop($log);
    }
    return $log;
}
function writeLog($FILE, $log, $max) {
    foreach($_POST as $key => $value) {
        $_POST[$key] = mb_convert_encoding($_POST[$key], "Shift_JIS", "auto");
        $_POST[$key] = preg_replace("/&/", "&amp;", $_POST[$key]);
        $_POST[$key] = preg_replace("/</", "&lt;", $_POST[$key]);
        $_POST[$key] = preg_replace("/>/", "$gt;", $_POST[$key]);
        $_POST[$key] = preg_replace("/\s*\x0D\x0A\s*/", "<br>", $_POST[$key]);
        $_POST[$key] = preg_replace("/\s+/", " ", $_POST[$key]);
    } 
    $tm = date("U");
    $data = join("\t", array($tm, $_POST['name'], $_POST['title'], $_POST['text'], ""));
    array_unshift($log, $data);
    while(count($log) > $max) {
        array_pop($log);
    }
    if(!($file = fopen($FILE, "w"))) {
        return;
    }
    flock($file, LOCK_EX);
    fputs($file, join("\n", $log));
    flock($file, LOCK_UN);
    fclose($file);
    return $log;
}
function deleteLog($FILE, $log) {
    array_splice($log, $_POST['del'], 1);
    if(!($file = fopen($FILE, "w"))) {
        return;
    }
    flock($file, LOCK_EX);
    fputs($file, join("\n", $log));
    flock($file, LOCK_UN);
    fclose($file);
    return $log;
}
function printLog($log, $view) {
    $page = $_GET['page'];
    $start = $page * $view;
    $end = $start + $view;
    $count = count($log);
    if($end > $count) {
        $end = $count;
    }
    for($i = $start ; $i < $end ; $i++) {
        if(!preg_match("/\t/", $log[$i])) {
            continue;
        }
        list($tm, $name, $title, $text) = explode("\t", $log[$i]);
        $tm = getdate($tm);
        $tm = sprintf("%02d/%02d %02d:%02d", $tm[mon], $tm[mday], $tm[hours], $tm[minutes]);
        if($name === "") {
            $name = "名無し";
        }
        if($title === "") {
            $title = "無題";
        }
        printf("<input type=\"radio\" name=\"del\" value=\"%0d\">", $i);
        echo "【 $title 】$name<br>";
        echo "$text";
        echo "<div align=\"right\">$tm</div>";
        echo "<hr>\n";
    }
    echo "<center>\n";
    if($page > 0) {
        printf("<a href=\"%s?page=%d\">≪前ページ</a>\n", $_SERVER['SCRIPT_NAME'], $page - 1);
    }
    if($end < $count) {
        printf("<a href=\"%s?page=%d\">次ページ≫</a>\n", $_SERVER['SCRIPT_NAME'], $page + 1);
    }
    echo "</center>\n";
}

//================================================ メインプログラム
$log = readLog($FILE);
if($_POST['mode'] === "write") {
    if($_POST['text'] !== ""
     and strlen($_POST['text']) <= $TEXTMAX * 2
     and strlen($_POST['name']) <= $NAMEMAX * 2
     and strlen($_POST['title']) <= $TITLEMAX * 2    ) {
        //    $log = writeLog($FILE, $log, $MAX);
        //サンプルにつき書き込み停止
    }
}
elseif($_POST['mode'] === "delete") {
    if($_POST['pass'] === $PASSWORD) {
        //    $log = deleteLog($FILE, $log);
    }
}

?>

<html>
<head>
    <title>掲示板</title>
</head>
<body bgcolor="#ffffcc">
    <h1 style="margin:2px;text-align:center;font-size:15px;letter-spacing:50px">掲示板</h1>
    <hr>
    <form action="<?=$_SERVER['SCRIPT_NAME']?>" method="POST">
        名前:<input type="text" name="name" size="50" maxlength="<?=$NAMEMAX?>" value="<?=$_POST['name']?>"><br>
        <br>
        題名:<input type="text" name="title" size="50" maxlength="<?=$TITLEMAX?>"><br>
        <br>
        本文: <small>※全角<?=$TEXTMAX?>文字以内</small><br>
        <textarea name="text" rows="10" cols="80"></textarea><br>
        <br>
        <input type="hidden" name="mode" value="write">
        <input type="submit" value=" 書き込み "><br>
    </form>
    <form action="<?=$_SERVER['SCRIPT_NAME']?>" method="POST">
        <hr>

<?php
printLog($log, $VIEW);
?>

        <div align="right">
        <input type="password" name="pass" value="<?=$_POST['pass']?>" size="4">
        <input type="hidden" name="mode" value="delete">
        <input type="submit" value="削除">
        </div>
    </form>
</body>
</html>
PHP
Hello world ! ユーザーエージェント取得・表示($_SERVER["HTTP_USER_AGENT"])
IPアドレス取得・表示($_SERVER["REMOTE_ADDR"]) リンク元取得・表示($_SERVER["HTTP_REFERER"])
URL取得・表示($_SERVER["HTTP_HOST"], $_SERVER["REQUEST_URI"]) 環境変数一覧表($_SERVER, list, each)
ホスト名取得・表示(gethostbyaddr, $_SERVER["REMOTE_ADDR"]) 日付を表示(getdate)
時間を表示(getdate, hours, minutes,) getdate()関数取得可能情報一覧表(list, each)
日時を表示(出力形式を指定, date) date()関数出力形式一覧表
指定の日までの日数(mktime) 時刻によって挨拶文を変える
曜日によって背景色を変える 日によって背景色を変える
月によって背景色を変える 時間によって背景画像を変える
文字サイズ・背景色選択 見るたびに背景色を変える(mt_rand)
おみくじ(array_rand) 文字列置き換え(str_replace)
パスワード認証 カラーチャート
グラフ(棒グラフ) アクセスカウンター
アクセスカウンター(画像) アクセスカウンター(今日・昨日)
訪問回数(クッキー, $HTTP_COOKIE_VARS, setcookie) クッションページ($_SERVER["QUERY_STRING"])
クッションページ($_SERVER["PATH_INFO"]) カレンダー
カレンダー(今年1月〜12月) カレンダー(今年1月〜12月, 前年次年リンク付)
掲示板 ディレクトリ内ファイル一覧表示
Webデータ取得(HTMLソース取得, file_get_contents) トラックバック受信
トラックバック送信(POST, file_get_contents) メール送信(メールフォーム, mb_send_mail)
リダイレクト(header, Location) 条件指定リダイレクト(header, Location)
言語振り分けリダイレクト(header, Location) 条件指定アクセス拒否(ステータスコードを返す)
HTMLファイル読み込み・表示(include) 外部PHPファイル読み込み(include)
HTMLファイル読み込み・パスワード認証 HTMLファイル読み込み・条件指定アクセス拒否
HTMLファイル読み込み・条件指定リダイレクト 画像ファイル読み込み・表示(ImageCreateFromJPEG)
画像ファイル読み込み・文字埋め込み・表示(ImageString) 画像ファイル読み込み・文字埋め込み・保存(ImageString)
画像ファイル読み込み・サイズ変更・表示(ImageCopyResampled) 画像ファイル読み込み・サイズ変更・保存(ImageCopyResampled)
画像ファイル読み込み・切り出し・表示 画像ファイル読み込み・切り出し・保存
画像合成・表示(ImageCopy) 画像合成・保存(ImageCopy)
画像生成・表示(ImageCreate) 画像生成・保存(ImageCreate)
画像合成アクセスカウンター
かんたん作成【HTML CSS JavaScript PHP CGI Perl Ruby Python .htaccess】