タイでエビを釣ろうぜ!2.0
- 2008/05/11(日) 18:30:00
関連:タイでエビを釣ろうぜ!
zapaさんからついったーでご指摘いただいたのでエントリ。
つまり、ギークに脆弱性を突かれたわけだ!!(違
早速、直そうと思ったが、やぱりまずはしくじる。
$ary_ebi=array('<img src=" エビ jpg"," えびちゃん jpg"," 海老蔵 jpg">');
エビ画像しか表示されない件(・c_・`)
で、ついったーで再びアドバイスを頂戴して、ででで・け・たヾ(゚∀゚*)ノ
$ary_ebi=array("エビ.jpg","えびちゃん.jpg","海老蔵.jpg");
にして
<img src="<?php print($ary_ebi[0]);?>">
の方がスマート。なるほど。ほのかに香るナイスギーク臭。
zapaさん、超ありがとうございます!あなたは私のエビです!褒めてます!ありがとうありがとう!!
さて。今日気付いたこと。
べにぢょって日曜ヒマなんだな・・・・・・・・・・・。
タイでエビを釣ろうぜ!
- 2008/05/11(日) 00:00:00
日記
あいつもこいつもあのエビを!ただひっとつ狙っているんだよ!
先日、行った中華料理屋さんのエビがあまりにもおいしかったので、
敬意を表してなんか作る(`・ω・´)
エビうめぇwwwwww
↓
この思いのたけをPHPにぶつけタイ!
↓
はっ。タイ?そうだ、エビでタイを釣ればいんじゃネ?
↓
だがちょっと待って欲しい。紅が釣りたいのはタイではなくエビである。
↓
そうか!タイでエビを釣ればいいじゃないξ*´∀`)ξ
勉強する気もしない気も!このエビにかかっているんだよ!
もしダメならこの紅は!もうグレちまうよ><
タイでエビを釣ろう♪
あ。たいしたことはしてないど。
おみくじの時と同じ要領で、配列を使ってランダムに画像を出力しただけなので。
ただ、エビを賞賛したかったのだ。そんだけ!
タイでエビを釣ろうぜ!
ではソース。
※タグの最初は全角にしてあります。
ebi.php
<html>
<head><title>タイでエビを釣ろうぜ!
</title></head>
<body>
<form method="POST" action="ebi_output.php">
タイでエビを <input type="submit" value="釣る!" />
</form>
</body>
</html>
いつもの感じ。
ebi_output.php
<?php
//各エビデータを格納
$ary_ebi=array('<img src="画像URL1">','<img src="画像URL2">','<img src="画像URL3">');
shuffle($ary_ebi);
?>
<html>
<head><title>釣れた釣れた!</title></head>
<body>
<?php print($ary_ebi[0]);?>
が釣れました!
</body>
</html>
Yes。おみくじの時と同じ感じ。
4日目 おみくじとか作っちゃうかモナー!
新しいことは何もしていない。がっ。
最初 ”PHP 画像 ランダム 表示” などでググったらいろいろ出てきてテンパった。
しかもさああ。
いっちゃん初めは、おみくじと同様、連想配列を使おうかなと思ったのね。
で、内心うすうす「ぜってーちがうだろなー(;・∀・)」と思いつつ、下記のような方法をガッテンした。
<?php
//各エビデータの用意
$ary_ebi=array("エビ","エビちゃん","海老蔵");
$ary_img=array(
"エビ"=>print('<img src="画像URL1">',
"エビちゃん"=>print('<img src="画像URL2">',
"海老蔵"=>'<img src="画像URL3">');
shuffle($ary_ebi);
?>
これはひどい。あんまりだ。=> のあとに print っておかしくネ?
その後、よく考えたら連想配列じゃなくても EE JUMP !と気付き、普通の配列に変更。
その方法でも、最初はワケの分からんコードを書いた。
<?php
//画像出力を変数に代入
$ebi1='<img src="画像URL1">';
$ebi2='<img src="画像URL2">';
$ebi3='<img src="画像URL3">';
//エビ変数を格納
$ary_ebi=array($ebi1,$ebi2,$ebi3);
shuffle($ary_ebi);
?>
だって!待って!話を聞いて!!
img タグはそのまま置けないと思ったんだよう!!何かに入れないとムリぽだと思ったんだよう!
これはこれで OK だったが、へっぽこギーク臭を拭えないコードだったので、
「だってダメなんでしょう・・・?」 とダメもとで配列に入れてみたら出来た。なんだよう(`・3・)
ギークな力武健次さんについったーで
「自分の失敗は他人の勉強にもなるから,できる範囲で書いておくことは大事だと思います.」
とありがたいアドバイスをいただいたので過程も書いてみた。
ホントはリアルタイムで晒していきたいが、うまい方法が見つからないのが悩ましい。
ついったーに投げようかとも思ったけど、文字数などを考慮すると微妙なところ。
ううむ。要検討。
11日目 ゲストブック作ったよ\(^o^)/
- 2008/02/25(月) 00:00:00
日記
いい嫁とサシでデートしてきた\(^o^)/
やー。いいね。リア充すぎてこわいわ・・・っ
ぶっちゃけ PHP の話はマッタクしてないからね!
女2人ゆうたら、やっぱ恋バナですよ恋バナ。恋バナ充。
パスタとピザをシェアして食べて、最後に 「スイーツありますか?」 て聞いたら
「ドルチェならあります」 て言われた/(^o^)\ ドルチェ(笑)
もう1人のイイ嫁からも 「恋バナしたい!」 てメールもらったにょ!
バレンタインチョコももらっちゃったもんね!いいだろいいだろ!!
写真うpしようと思って体裁ととのえてるうち、気付いたら全部食べていた。
動物的本能おk。紅は自由だ。
ん。恋バナkwsk?
教えてあげないヨ!ジャン♪サクサクさんかくポリンキー\(^o^)/
そういえばITmediaにインタビューされました。「そういえば」 とは何だ。謝謝!
テキストベースのゲストブックに書き込んで!
メールはやっぱやめた。だって難しいんだもん(`・3・)
うわああごめんなさい!もっとぶって><
とりあえず、もう少し修行積んでから後編やる。今日はテキストベースのゲストブック作るよ。
以下ソース。
※タグの最初は全角にしてあります。
1 <html>
2 <head>
3 <title>ゲストブック</title>
4 </head>
5 <body>
6 <h1 style="background":#cccccc">ゲストブック(書き込み)
7 </h1>
8 <form method="POST" action="guest_write.php">
9 お名前:
10 <input type="text" name="name" size="20" maxlength="30" /><br>
11 メッセージ:
12 <input type="text" name="message" size="70" maxlength="255" /><br>
13 <input type="submit" value="送信" />
14 </form>
15 </body>
16 </html>
サンプル:guest_input.php
これの説明は省略。普通の入力フォームだ。同じようなことを既に何度もやってるっちゃね。
参考:3日目 今度はあなたに挨拶したい><
とゆことで、今回も2種類作るよ。
1 <?php
2 $file=fopen("guest.dat","a");
3 flock($file,LOCK_EX);
4 $line=date("Y年 m月 d日 H:i:s")."¥t";
5 $line.=$_POST['name']."¥t";
6 $line.=$_POST['message']."¥t";
7 fputs($file,$line."¥n");
8 flock($file,LOCK_UN);
9 fclose($file);
10 header("Location:guest_input.php");
11 ?>
このソースを見たとき、一番 「はぁ?」 と思ったのが4〜6行目。
変数 $lineに次々といろんなデータを代入している。これはおかしい。
だって変数は、一度代入しても、再び代入しなおすと中身が変わるはずだもん!
参考:3日目 今度はあなたに挨拶したい><
どうも5,6行目の $line.←このドットがクサイ。
参考書の印刷ミスかと思ってスルーしそうになったけど、きっとコレには意味があるはず。
独自に調査した結果、以下のことが判明。
$line="べにぢょ"
$line.="ナイスギーク"
print("$line");
実行結果:test.php
おおお!中身が上書きされていない!!!
一応、.(ドット)抜きのパターンもうpしてみた。
実行結果:test2.php
イエス!イエスイエス!やはりな!思ったとおりだ!!!
”女は上書き保存 男は名前を付けて保存”って名言があるじゃんかー。
以前、ブログでこの話をしたらdanちゃんからトラバもらた。嬉しかった。
というのはさておき。
$line. は男だ。名前をつけて保存しちゃうのだ。フランス語風に言うと男性変数だ。
$line だけだと女。上書き保存。フランス語風に言うと女性変数なのさ!
へへん!まるっとお見通したぞ!
これさえ分かれば、このソースの山場を越えたも同然っ。
あとはまたーりいきまっしょい。
2行目。
fopen(ファイル名,モード)
指定されたファイルを指定されたモードで開きます。
参考:10日でおぼえるPHP5 入門教室
guest.dat を "a"というモードで開いて、それを $file に代入。
モードの説明はこのへん。"a" は書き出し用のみでオープンする、とな。OK。
3行目。
flock
flock()は、指定したファイルをロックする関数です。
参考:PHP関数講座:flock - そふぃのphp入門
参考書によると、あるユーザAがファイルを開いて書き込んでいる間に、
別のユーザBが書き込みを行ったら困るから、あらかじめロックしておく必要があるらしい。
上記サイトによると、LOCK_EX は読み書き両方禁止なんだって。
ちなみに、ロックマンエグゼとは関係ない。そもそもそんなに似ていない。
4〜6行目は上で説明したとおり。
そうそう。"¥t"はタブの意味なんだって。データをどこで区切るかを明確にしたいとか。へぇ。
7行目。
fputs関数
fputs(ファイル・ハンドラ,書き込む文字列)
参考:10日でおぼえるPHP5 入門教室
ふぁいる・はんどら?
今回の内容とは関係ないけど、ググってたらこんなんめっけた。
参考:名前を使用して、エントリのファイルハンドラ (読み込み専用) を取得する
ファイル・ハンドラ=読み込み専用 と解釈。
つまり、読み込み専用ファイル guest.dat に$line の内容を書き込め、ということか。
そだ、"¥n" ってのは改行の意味ね。これを.(ドット) で連結させているよ。
8行目は3行目と一緒や。
今度は LOCK_UN だから、ロックを破棄しているのね。書き込みが終了したから破棄。
そじゃないと次の人が書き込めないもんね。
9行目。
fclose
fopen()関数 で開いたファイルに対する操作が終わったら閉じます。
参考:fclose()関数/PHP関数リファレンス
10行目。
これは確か、リダイレクトさせる関数。
参考:コレやってみたい! - べ、べつにブクマ禁止したいわけじゃないんだからっ!
でけた!終了!
書き込んだ内容はこのへんで見れるはず。
サンプル:guest.dat
ちかれた。寝るぞ。おやすみなさい(・∀・)/~~
10日目 めぇるみぃ!! 【前編】
- 2008/01/30(水) 00:00:00
日記
引っ越した\(^o^)/ターター!!
でね、つい先日までネット環境がなかった。田口さんに 「大丈夫なの?」 て心配された。
同情するなら監禁してよ!!
「こんなに脆弱性だらけじゃないか!仕方ない子だ。ライフハックしてやる!」て言われたい><
落ち着け。絡みすぎだ。ごめんなさい。以後気をつけヌ。
メール関数でネゲットしよう♪
けんすうが言っていた。
「メール関数を制する者はネゲットを制す」 と。さすがネゲッターの言葉は説得力がある。
ちょっと違ってたかな・・・でもだいたいそんな感じだろうと意訳。
PHP を使うとメールが送れる (or 受け取れる) らしい。
普通のメールのやり取りは糸電話ちっくというか、
相手のコップと自分のコップがなきゃダメだけど、PHP はなんだろ、私書箱?
とにかくもっと気軽な感じなのさ!
紅はメアドを公開してなくて、代わりにレンタルCGIのメールフォームを設置している。
てゆかコレ超ひさびさに見たw ちょっと可愛い・・・なかなか可愛いとこあるな・・・。
ソースちょろっと見たけど、さては PHP だよね?
ってことは、メール関数をマスターすればメールフォームも自作できるじゃん!
すんげぇすんげぇ!! がんばろう。
参考書に従って作るとすると、リスト1とリスト2の2種類、作成せねばならぬ。
しかもリスト2は php.ini の設定をいじる必要があるとかないとか。
エー。お願い、ないって言ってよハニー(*´・Д・)
長くなりそうなので2回に分ける。今日は前編。
じゃ、ソース貼るぞ。
参考:10日でおぼえるPHP5 入門教室 ●メール関数で訪問者の声を受け取ろう
※タグの最初は全角にしてあります。
1 <html>
2 <head><title>ギークなお姉さんは好きですか(めぇるみぃ!)</title></head>
3 <body>
4 <h1 style="background:#FFCCCC; color:#663333;" >
5 ギークなお姉さんは好きですか(めぇるみぃ!)</h1>
6 <form method="POST" action="sendmail.php">
7 <input type="hidden" name="email"
8 value="lovecall@geek.jp" />
9 <input type="hidden" name="_subject"
10 value="ギークなお姉さんは好きですか" />
11 <input type="hidden" name="_result"
12 value="<?php print($_SERVER['PHP_SELF']);?>" />
13 <table border="0">
14 <tr>
15 <th align="right">名前:</th>
16 <td><input type="text" name="name" size="20" maxlength="30" />
17 </td></tr>
18 <tr>
19 <th align="right">E-mail:</th>
20 <td><input type="text" name="_from" size="50" maxlength="255" />
21 </td></tr>
22 <tr>
23 <th align="right" valign="top">自由記入欄:</th>
24 <td><textarea name="memo" cols="50" rows="5">
25 </textarea></td></tr>
26 </table>
27 <input type="submit" value="送信" />
28 <input type="reset" value="クリア" />
29 </form>
30 </body>
31 </html>
サンプル:mail_input.php
おお。ほとんど html だ。
ねね、「めぇるみぃ!」って死語かい?
昔はよく見かけたのになあ。あの侍魂の健さんでさえ言ってた気がする。
当時はまさか自分に言ってると思わなかった。完全スルー。メールを送るって発想がなかった。
今なら分かる。俺が送らなくても代わりはいるもの。とか、そゆう綾波はいらんよ!
さぁ!今こそめぇるみぃっヾ(`・д´・)ツ))
1〜5行目は省略。
6行目。
全く同じものを使った記憶がある。
POST 形式でユーザが入力したデータを sendmail.php に送るよ、というアレだ。
で、コレを使うとsendmail.phpの方の $_POST に、ユーザが入力してくれたデータを
自動的に代入してくれるんだった。
参考:3日目 今度はあなたに挨拶したい><
7〜11行目は下記サイトが分かりやすい。
参考:隠しデータを送信する
12行目。value の中身がphpだ。
$_SERVER は何度か出てきてる気がする。
参考:7日目 ヘッダ情報が見たい!知りたい!晒したい!
そうそう。グローバル変数。いろいろ取得できる子だ。
今回は PHP_SELF を取得して、それを print するらしい。
$_SERVER['PHP_SELF']は現在実行されているスクリプトのパスを返します。
参考:10日でおぼえるPHP5 入門教室
もうちょい具体的に。
PHP_SELF
現在実行しているスクリプトのファイル名です。ドキュメントルートから取得されます。
$_SERVER["PHP_SELF"];
として使いますが、例えば・・・
URLが、http://www.test.com/index.phpなら
/index.php
http://www.test.com/somedir/somefile.phpなら
/somedir/somefile.php
が返されます。
(・∀・)ィィネ!!分かりやすい!
ってことは、この場合は mail_input.php が返ってくるのかな?
ふーん・・・・・
あああああ!分かった!いま分かった!!!!!なんだ、そゆうことね!
自分で7〜11行目の参考リンク貼っておきながら把握してなかった。
8行目の value に入れてるメアドは、自分が受信したいメアドを書くのか。
んで、件名は自分がこのメールフォームから届いたメールだと認識できる名前にするのね。
そうした方が振り分けとか便利だもんね。
だから12行目だけいきなり php が出てきたのか。
ここはユーザが入力したデータだから、紅の意思が介入する余地がない。
あぁあぁ、だから print。なるほどなるほど。
やーごめんごめん!ちょっと勘違いしてたw
うっかりユーザ気分で、受け取るための設定を全く考えてなかった。
大丈夫、もう完全に理解した。
で、なんだっけ。そだ。PHP_SELF だ。
$_SERVER['PHP_SELF'] で返ってきたmail_input.php を print しろ、ということね。
ふんふんふーん♪いい具合にしっくりきた。
このたびはお騒がせして誠にスミマセンでした><
13〜26行目はマジで大丈夫。だってこれは普通の table タグですもの。
27、28行目もおk。送信ボタンは3日目でも出てきたもんね。
はあー。よかったよかった。まったく一時はどうなることかと思ったよ。
でも後編がきっとキツいんだろな・・・・
次回は土曜の夜あたりに。こーはんへつづく!
9日目 カレンダを作ルンダ♪
- 2008/01/01(火) 17:00:00
日記
あけましておめでとうございますー!
書初めを写メでうpって、アナログとハイテクのコラボレーションって感じでなんかいいよね!
アナログとハイテクはもっと仲良くすればいい。
大晦日&元旦は、田口さん・いとまささん・けんすう・$dropdbさん・劇団ブサイコロジカルの
女優さんたちと、田口さんちで年越し&初詣。
おみくじ引いたら吉だったけど、吉のわりにはすごくいいことたくさん書いてあったので超満足♪
2007年はdanちゃんちにお邪魔したりひろゆきさんと朝まで飲めたりして、分不相応なくらいに
幸せな出来事がいっぱいあった。
先月は師走ってて後半更新が滞ったけど、きっとRSSリーダーで読んでる人が多いだろうし、
更新しなければしてないことはバレないんじゃ・・・なんてナンセンスなことを考えていた。
この考えはおそらく一理ある。がっ。一理あることが正しい行為とは限らない。
2008年も頑張ろう頑張ろう!みんなに素敵な出来事がたくさんたくさん訪れることを祈って。
本年もどうぞ宜しくお願いしますっ┏○"
カレンダを作ルンダ!
タイミング的に、カレンダを作りたいのでカレンダを作ルンダ。
昨日西武に行った時もたくさん売ってたし。きっと今が旬。旬に乗ルンダ。
んじゃ、ソース貼ルンダ。(←そろそろ飽きてきた)
※タグの最初は全角にしてあります。
あっ、前回コメントくださった Theoria Laevatain さん、ありがとうございました!
コンバータ改造したいです!今年の目標のひとつにするぞっ。
1 <?php
2 $today_year =date("Y");
3 $today_month =date("n");
4 $current=mktime(0,0,0,$today_month,1,$today_year);
5 $first_day=date("w",$current);
6 $last_day=date("t",$current);
7 ?>
8 <html>
9 <head>
10 <title>カレンダー</title>
11 </head>
12 <body>
13 <h1 style="background:#cccccc">
14 <?php print(date("Y年m月",$current)); ?>
15 のカレンダー</h1>
16 <table border="1" width="300">
17 <tr>
18 <td>日</td><td>月</td><td>火</td><td>水</td><td>木</td><td>金</td><td>土</td>
19 </tr>
20 <?php
21 for($i=1;$i<=$first_day+$last_day;$i++){
22 if($i%7==1){print("<tr>");}
23 if($i>$first_day){
24 print("<td>".($i-$first_day)."</td>");
25 }else{
26 print("<td> </td>");
27 }
28 if($i%7==0){print("</tr>");}
29 }
30 ?>
31 </table>
32 </body>
33 </html>
サンプル:carendar.php
Σ目がっ・・・目がぁあああーーーっ!!!
なにこのバルスコード。目がぶっ壊れルンダ><
これは堂本剛じゃなくても正直しんどい。わりとギブめ。
でもがんばルンダ!(←クセになってきた)
2行目。
変数 $today_year に date("Y") を代入。
さて。date とは何ぞ?
date - ローカルの日付/時刻を書式化する
参考:PHP: date - Manual
↑のページを下にスクロール。
Y 年。4 桁の数字。 例: 1999または2003
n 月。数字。先頭にゼロをつけない。 1 から 12
つまり、date("Y") でローカルで記録されてる西暦、今だったら2008を取得して、
それを $today_year に代入するってことね。
じゃあ $today_month も同じ理屈だ。
これは date("n") だから月、今だったら1を取得して $today_month に代入、っと。
ココまではいい。ココからがちょっとややこしくなってくルンd(←そろそろ自重)
4行目。
mktime って何?
mktime関数はタイムスタンプを取得します。
取得したタイムスタンプは、date関数やgetdateなど、タイムスタンプを
パラメータとして受け取る関数で使われます。
パラメータは下位の要素から省略可能です。
たとえば、「年、月、日」をまとめて省略することはできますが、
最初のパラメータ「時」を省略して「分、秒」を指定することはできません。
参考:PHP辞典 (Desktop reference)
この関数は直感的に分かり難いんだけど、上記の参考書の説明が紅は一番分かり易かった。
長くなるので引用はしないけど、文例が GJ なのだ。
たぶん、mktime 関数ってのは年表が読める子なんだと思う。
5行目。
また date が出てきた。
上で引用したページをもう1回見てみる。
説明
string date ( string $format [, int $timestamp ] )
指定された引数 timestamp を、与えられた フォーマット文字列によりフォーマットし、
日付文字列を返します。 タイムスタンプが与えられない場合は、現在の時刻が使われます。
つまり timestamp はオプションであり そのデフォルト値は time() の値です。
w 曜日。数値。 0 (日曜)から 6 (土曜)
t 指定した月の日数。 28 から 31
ふむん。
5行目は w と $current で今の月、つまりアクセスした月の最初の曜日を$first_day に代入。
6行目も同じく、その月の日数=最後の日付。
つまり31日まである月だったら31を$last_day に代入と。
はぁ・・・息苦しい・・・。
日本語でおk、と言いたいけど言えないのがつらい。我慢する。
8〜13行目までは html なので飛ばす。
14行目。
(date("Y年m月",$current)) を print せよ、だそうな。
これは上と同じだよね。date で今の年月日を取得して、それを出力せよって意味だ。
15〜19行目まで html。飛ばす。
21行目。
for が出てきた。前回やった。繰り返し構文。
参考:8日目 目指せ!ループマスターへの道!
まずは初期化。$i に 1 を代入。
次に終了条件。$i が $first_day と $last_day を足した値より小さいうちは繰り返しを続ける。
言い換えると、この条件が成り立たなくなったら繰り返しが終わる。
増分式は $i++。繰り返すごとに $i に 1 を足していく。
ココが非常に分かりにくい。
ええとね、$first_day ってのは最初の曜日の数字が入る、って言ってたよね。
たとえば、1月は最初の曜日が火曜日だから、ココに2が入るのね。
で、$last_day は最後の日付だから31が入る。2+31=33。$i は1だから、1よりは大きい。
なので、$i<=$first_day+$last_day はまだ成り立つ。
ループを重ねるごとにどんどん $i に1を足していって、この処理を延々と繰り返す。
いつ終わるかというと、$i が33になったとき。
その間、どんな処理を繰り返すかというのは22行目以降。
もし $i%7==1 だったら <tr> を出力せよ、と言ってる。
% は算術演算子っていうんだって。
算術演算子
加減乗除とは、最も基本的で簡単な足し算や引き算、掛け算、割り算を行う演算子です。
% 剰余 17 % 5 割り算したときの割り切れなかった数を求める
参考:演算子/PHP入門
$i を7で割って、余りが超イコールで1だったら、ってことか。
具体的にはなんだ。$i が8とか15のときは余りが1になるから、そのときは <tr> を出力か。
23〜24行目。
もし $i が $first_day より大きいときは、("<td>".($i-$first_day)."</td>") を出力せよ、と。
うーーーん。
1月の場合、$first_day は2だから、$i が3以上のときは(カッコ)内を出力、ってことらしい。
出力する内容は、$i から $first_day を引いた数値が入ったtd。
- 減算 17 - 5 2つ以上の値の引き算を行う
ピリオドは文字列を連結させるそうな。
$str = "土中" . "モグラ";
↑文字列を連結させるには(.)を使います
"土中"と"モグラ"が結合されて$strに代入されます
参考:もぐりん PHPのお勉強->演算子
なので、$i が3のときはそこから2を引いた数、つまり1というセルが出力される。
おおおおお!先ほどからひそかにじわじわ感じていたが!!理解できた気がするううう!!!
25〜26行目。
そうじゃなかったら、$i が$first_day より小さかったら ("<td> </td>") を出力せよ。
&nbsp というのは空白のこと。だから、数字が入ってない空のセルを出力してね、と言ってる。
28行目。
もし $i を7で割った余りが超イコールで0だったら。つまり7で割り切れたら。
</tr>だから、行を閉じろと言ってる。これにて終了。はぁ。ちかれた・・・。
まとめよう。
カレンダーなので、1月40日とか50日まで処理を繰り返されては困る。
だから、どこで終わるかを21行目で指定した。
一週間は7日なので、土曜まで進んだら新しい列を追加したい。それを22行目で指示。
23行目の $i>$first_day というのは、最初の曜日より前のセル、今月の場合だと
日・月に数字は入れないから、それ以降だったら日付を入れろ、と条件式で指示してる。
だって前のセルって先月だからね。本来なら12月31日が入るべき場所だから、
そこには空白を入れろと言ってる。
28行目は一週間が終わったら列を閉じろと。余りが3とか4のときは列を追加しない。
だってまだ水曜とか木曜なのに来週になっちゃうとか困るっしょ。
だから <tr> とか追加しない。話のわかるヤツだ。if ヤバイ。超がんばれ。
わぁー!できたできた!カレンダーだカレンダーだ!!すごいすごい!!
みんなコレをホームにしたらいいんじゃないかな!?だって便利だもんね!紅はしないけど!!
元旦からかなり疲れた。頑張った自分(笑)を褒めてあげたい。
途中で寝落ちしたのはバレていないはず.....|д・*)



