1. 現在位置:
  2. トップページ
  3. HP作成tips
  4. PHP-更新履歴
更新履歴
■ サンプル

「更新履歴」こちら 管理者パスワードは「test」です

更新履歴表示 new.php
管理者専用書き込み new_a.php
書き込みチェック new1.php
ログファイル new.dat(666)
一時書き込み用 new1.dat(666)
エラーページ error.php

■ ソース

new.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<title>更新履歴</title>
<style type="text/css">
TD { font-size: 10pt }
</style>
</HEAD>
<BODY>
<CENTER>
<FONT SIZE="3">更新履歴</FONT><BR><BR>
<TABLE BORDERCOLOR="#f5e0e0" BORDER="1" CELLSPACING="0" CELLPADDING="5" width="650">
<TR><TD WIDTH="70">更新日</TD><TD WIDTH="150">更新ページ</TD><TD>更新内容</TD></TR>
<? include("new.dat"); ?>
</TABLE>
</CENTER>
<DIV align="right">
<FORM action="new_a.php" method="post">
<input type=password name="pass" size=10><INPUT TYPE="submit" name="submit" VALUE="管理者専用">
</FORM>
</DIV>
</BODY>
</HTML>

■ ソース

new_a.php
<?php

$pass = $HTTP_POST_VARS['pass'];
$submit = $HTTP_POST_VARS['submit'];

// 入力のチェック if (strstr($pass , 'test')){

print "<html>\n";
print "<head>\n";
print "<title>更新履歴</title>\n";
print "<META Http-Equiv='Content-Type' Content='text/html;charset=EUC-JP'>\n";
print "<style type='text/css'>\n";
print "TD { font-size: 10pt }\n";
print "</style>\n";
print "</head>\n";
print "<body bgcolor='#ffffff' link='#3333ff' vlink='#000033' alink='#ffff00' marginwidth=0 marginheight=0 leftmargin=0 topmargin=0>\n";
print "<center>\n";
print "<BR><BR><BR>\n";
print "<FORM action='new1.php' method='post'>\n";
print "<TABLE BORDER=0 cellpadding=5 cellspacing=0>\n";
print "<TR>\n";
print "<TD>タイトル</TD>\n";V print "<TD><input type='text' name='title' size=90></TD>\n";
print "</TR>\n";
print "<TR>\n";
print "<TD>更新ページURL</TD>\n";
print "<TD><input type='text' name='url' size=90></TD>\n";
print "</TR>\n";
print "<TR>\n";
print "<TD>更新内容</TD>\n";
print "<TD><input type='text' name='comment' size=90></TD>\n";
print "</TR>\n";
print "<TR><TD align='center' colspan=2>\n";
print "<INPUT TYPE='submit' name='submit1' VALUE='送信する'>\n";
print "</TD></TR>\n";
print "</TABLE>\n";
print "</FORM>\n";
print "<BR>\n";
print "</center>\n";
print "</body>\n";
print "</html>\n";
}
else{
    print("こちらは管理者専用です。ブラウザの戻るボタンで戻ってください。\n");
    exit;
}

?>

■ ソース

new1.php
<?php

$count_max = 20;
$title = $HTTP_POST_VARS["title"];
$url = $HTTP_POST_VARS["url"];
$comment = $HTTP_POST_VARS["comment"];
$submit1 = $HTTP_POST_VARS["submit1"];
$daytime = date('Y/m/d');

$title = stripslashes($title);
$comment = stripslashes($comment);

// 書き込みボタンが押されて呼出された後の処理
if ($submit1 == "送信する") {

// エラーチェック
$item = array("title","url","comment");
    $err = "";
    if ( $$item[0] ) { $reg_title= $$item[0]; } else { $err .= "タイトルが未記入です<br>\n"; }
    if ( $$item[1] ) { $reg_url= $$item[1]; } else { $err .= "URLが未記入です<br>\n"; }
    if ( $$item[2] ) { $reg_comment= $$item[2]; } else { $err .= "更新内容が未記入です<br>\n"; }
    // $errに文字列がある場合はエラーページを表示
    if ( $err ) { include("error.php"); exit;}
}

// ファイルに書き込む文字列の作成
    $message = "<TR><TD>$daytime</TD>";
    $message .= "<TD><A HREF='$url'>$title</A></TD>";
    $message .= "<TD>$comment</TD></TR>\n";

// ファイルオープン1書き込み用排他ロック

    $fp = fopen("new.dat","r+");    // fopen=ファイルまたはURLをオープンする// 'r+'=読みこみ・書きこみ用にオープンします。ファイルポインタを ファイルの先頭に置きます。
    if ($fp == FALSE){
        print("ファイルポインタのオープンに失敗しました。<BR>\n");
        exit;
    }
    flock($fp, LOCK_EX);        //LOCK_EX=書き込み用排他ロック flock=汎用のファイルロックを行う

// ファイルオープン2
    $fp2 = fopen("new1.dat","w+"); // fopen=ファイルまたはURLをオープンする// 'w+'=読みこみ・書きこみ用でオープンします。ファイルポインタを ファイルの先頭に置き、ファイルサイズをゼロにします。
    if($fp2 == FALSE){
        print("ファイルポインタのオープンに失敗しました。<BR>\n");
        exit;
    }

    set_file_buffer($fp, 0); // set_file_buffer=指定したファイルポインタのファイルバッファを設定する
    set_file_buffer($fp2, 0); // 0とした場合、書き込み操作は、 バッファリングされません

// フアイル2に追加書込みを書き込む
    fputs($fp2,$message); // fputs=ファイルポインタに書き込む

// ファイル1からファイル2へ読込み
    $count = 1;                // 最大表示チェック
    while(!feof($fp) && ($count < $count_max)){            // feof=ファイルポインタがファイル終端に達しているかどうか調べる
        $buffer = fgets($fp,4096);    // fgets=ファイルポインタから1行取得する
        fputs($fp2,$buffer);        // fputs=ファイルポインタに書き込む
        $count++;
    }
    rewind($fp); // rewind=ファイルポインタの位置を先頭に戻す
    rewind($fp2);

// ファイル2からファイル1へ読込み
    while(!feof($fp2)){            // feof=ファイルポインタがファイル終端に達しているかどうか調べる
        $buffer = fgets($fp2,4096);    // fgets=ファイルポインタから1行取得する
        fputs($fp,$buffer);        // fputs=ファイルポインタに書き込む
    }
    $len = ftell($fp);            // ftell=ファイルポインタから読み書きの位置を取得する=最終的に書き込んだ終端を取得する
    ftruncate($fp,$len);            // ftruncate=ファイルを指定した長さに丸める=余計な分を切り落とす

// ファイル1をロック解除
    flock($fp, LOCK_UN);        //LOCK_UN=ロック解除 flock=汎用のファイルロックを行う

    fclose($fp);                // fclose=オープンされたファイルポインタをクローズする
    if (!$fp) {
        print("ファイルポインタのクローズに失敗しました。<BR>\n");
        exit;
    }
    fclose($fp2);
    if (!$fp2) {
        print("ファイルポインタのクローズに失敗しました。<BR>\n");
        exit;
    }
header("Location: new.php\n\n");
?>

■ ソース

error.php
<html>
<head>
<title>記入エラー</title>
<META Http-Equiv="Content-Type" Content="text/html;charset=EUC-JP">
</head>
<body bgcolor="#FFFFFF" link="#3333ff" vlink="#ff0033" alink="#ffff00">
<div align="center">
<table width="400" border="0" cellspacing="0" cellpadding="0">
<tr align="left" valign="top">
    <td><BR><BR><BR><BR> </td>
</tr>
<tr align="left" valign="top">
    <td><? echo($err) ?><BR><BR>
    恐れ入りますが、ブラウザの「戻る」ボタンで登録ページに戻り、エラー部分の修正をお願いいたします。
    </td>
</tr>
</table>
<p>
<table border="0" cellpadding="0" cellspacing="0" width="600">
<tr>
    <td colspan="7" align="left" valign="top">
    <hr>
</td>
</tr>
<tr>
    <td colspan="7" align="center" valign="top"><font size="2" color="#000000">(c) 2003 mitti All rights reserved.</font></td>
</tr>
</table>
</div>
</body>
</html>