phpな休日 BBS sitemap
1. カレンダーの日付から絵日記にリンクする

夏休みですので絵日記をつけましょう。まずは手動で画像とログファイルをFTP送信して表示してみます。
イメージはこんな感じ。

実行

ログファイルはFORMから編集できるようにするつもりですが、今は

2006<>8<>2<>晴れ<>もちろん自慢の俊足である。<br>驚いた時など猛烈なスピードである。<>
2006<>8<>1<>晴れ<>我が輩はうさぎである。名前はまだない。<br>狭くて薄暗いところで寝ることを愛する。<>

このようなファイル(imagecalendarlog.cgi)をテキストエディタで書いて、それを読み込んで表示しています。
画像は [images] フォルダの中にある 2006-8-1.jpg・2006-8-2.jpg を表示しています。
画像ファイル名は [年-月-日.jpg] の形式でつけていきます。表示の時に

if (file_exists("./images/" . $nen . "-" . $gatsu . "-" . $gethi . ".jpg")) {

と、画像ファイルの存在を確認してから

print ("<img border='0' src='./images/" . $nen . "-" . $gatsu . "-" . $gethi . ".jpg'>");
}

で表示します。

カレンダー内の日付からのリンクは

$log = file("./imagecalendarlog.cgi"); //データを開いて
for ($i = 0; $i < count($log); $i++) { //展開する
$list = explode("<>", $log[$i]); //区切り文字 <> で区切る
if (($nen . $gatsu . $hi) == ($list[0] . $list[1] . $list[2])) { //その日のデータがあれば
print "<a href='./imagecalendar.php?nen=" . $nen . "&gatsu=" . $gatsu . "&hi=" . $hi . "'>"; //リンクを書く
$link = "on"; //リンクがあるという印
}
}
print $hi; //日表示
if ($link == "on") {
print "</a>";
}

こんな感じで GET で渡して、スクリプトの最初のほうで値があれば受け取り処理します。

2. 画像(JPEG)アップロード

ファイルをアップロードするにはフォームに enctype="multipart/form-data" を加えます。

<form action="imagecalendar.php" method="POST" enctype="multipart/form-data">

入力部分は <input type="file" size="50" name="image"> name属性名は任意ですが、受取側と揃えてください。
受取側は

if ($_FILES["image"]["tmp_name"] != "") { //画像をアップロードしようとした場合
move_uploaded_file($_FILES["image"]["tmp_name"], "./images/" . $nen . "-" . $gatsu . "-" . $gethi . ".jpg");
}

アップロードするのがJPEGファイルのみで、アップロードする権利が管理人のみにある場合、処理はこれだけで良いでしょう。
画像アップロード掲示板のように複数人がアップロード可能となる状況ですと、ファイルの容量や形式のチェックや制限が必要になってきます。
と、ここまで書いて気が変わり、ファイル形式のチェックだけすることにしました。ファイルがJPEGファイルであるかどうか確かめるには

if($_FILES["image"]["type"] == "image/pjpeg" or $_FILES["image"]["type"] == "image/jpeg"){

このように書きます。 [image/pjpeg] と [image/jpeg] の両方を書かないとPCとMacintoshに対応できないのでお気をつけて。
ログの追加・編集・削除の処理は前回の [メモカレンダー] と同様です。削除処理時に文字が空の状態で送信した場合ログを1行削除するわけでが、その際画像があれば削除するようにします。ファイル削除は unlink関数を使用します。

if(file_exists("./images/" . $nen . "-" . $gatsu . "-" . $gethi . ".jpg")){ //画像があれば
unlink("./images/" . $nen . "-" . $gatsu . "-" . $gethi . ".jpg"); //削除する
}

説明しきれない部分はこのページの一番下、スクリプトをダウンロードしてご覧ください。
下のサンプルは実行すると2006年8月のカレンダーから始まるようにしましたが(書込・編集・削除も管理人のみ可)、ダウンロードするスクリプトは実行時に当月表示するようにしてあります。

実行

この絵日記を こちら からzip形式でダウンロードできるようにしました。 お役立てください。


Fatal error: Uncaught Error: Undefined constant "Y.n.j" in /home/users/2/secret.jp-final/web/phpholiday/25/index.cgi:107 Stack trace: #0 /home/users/2/secret.jp-final/web/phpholiday/index.php(334): include() #1 {main} thrown in /home/users/2/secret.jp-final/web/phpholiday/25/index.cgi on line 107