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



ちかれた。寝るぞ。おやすみなさい(・∀・)/~~

LINEで送る

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日目でも出てきたもんね。





はあー。よかったよかった。まったく一時はどうなることかと思ったよ。
でも後編がきっとキツいんだろな・・・・
次回は土曜の夜あたりに。こーはんへつづく!

LINEで送る

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_yeardate("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 ヤバイ。超がんばれ。





わぁー!できたできた!カレンダーだカレンダーだ!!すごいすごい!!
みんなコレをホームにしたらいいんじゃないかな!?だって便利だもんね!紅はしないけど!!


元旦からかなり疲れた。頑張った自分(笑)を褒めてあげたい。
途中で寝落ちしたのはバレていないはず.....|д・*)


LINEで送る

8日目 目指せ!ループマスターへの道!

  • 2007/12/14(金) 00:00:00

日記

うわあああぁぁぁぁぁあああ!!!!
ナイスーなギークにゴイスーなツールもらった!!!!!!!


ギークなお姉さんのPHPソースコンバーター

ギークなお姉さんのPHPソースコンバーターは、
ギークなお姉さんが自分で書いたPHPのソースをアップロードすると、
そのソースをdtiブログに投稿しやすいようにタグを書き換えたり、
行番号を付け足してくれる、ただそれだけのツールです。

by ギークな(?)バスケットマン tetsunosuke


ちょ!!それだけって!!!それ以上なにを求めるというの!!!???
欲しがりません勝つまでは!!!!!

かみさま。私になにができますか。
どうすれば tetsunosuke さんは喜んでくれますか。
私は tetsunosuke さんを幸せにしたい。する!してみせる!!

そうだ。ギークになろう。
今のところ、それ以外の誠意の示し方を知らない。
とゆことで。よーし、べに特盛で頑張っちゃうぞー!
ここは本当におめでてーいんたーねっとですにょ^^^^^^



繰り返し構文を学ぼう

ヘッダ情報の取得の時に覚えた繰り返し構文。
前回は foreach という関数を使ったけど、繰り返し構文は他にもある。


PHPには、foreach命令のほかにも、繰り返しループを実現するための構文として、
for、while、do...whileという3つの構文が用意されています。
foreach命令が配列の要素数に基づいてループの終了を判定するのに対して、
for命令はあらかじめ指定された繰り返し回数で、while、do...while命令は
条件式の真偽(TRUE/FALSE)によってループの終了を判定します。

参考:10日でおぼえるPHP5 入門教室



foreach は前回やったので省略。
今回は for、while、do...while の3つに迫る。
この ”迫る”って表現はドキュメンタリーぽくてカコイイので、これからちょくちょく使おうと思う。
ではさっそく迫ろう。
これは上で挙げた参考書の説明が分かりやすかったので、以下それを引用する。


【for命令】
for(初期化式;終了条件;増分式){...ループ内で処理する処理...}

1回目のループで初期化式を実行し、変数を初期化します。
その後、ループを1回実行するごとに増分式が実行され、終了条件がFALSEになった
タイミングで処理を終了します。



【while命令】
while(条件式){ループ内で処理する処理...}

条件式がTRUEの間のみループを繰り返します(前置判断)。



【do...while命令】
do{...ループ内で処理する処理...}while(条件式);

条件式がTRUEの間のみループを繰り返します(後置判断)。




はぁ。Lovecall The Typing Girl って感じだった。参考書コピペ乙。
一応説明したけど、日本語よりソースコードの方が分かりやすいよね♪(←ギーク発言!!
ってことで、実際に書いて動かしてみる。
ヘッダ情報の取得の foreach 部分だけ書き換える。
まずは該当部分のソースを貼る。
※タグの最初は全角にしてあります。


8 foreach($aryHeader as $name){
9 
10  :(PHP終了タグとhtml部分中略)
11   
12 <?php print($name); ?></th>
13   <td><?php print($_SERVER[$name]); ?></td>
14  
15 :(html部分とPHP開始タグ中略)
16 }

サンプル:list_header.php


うん。
foreach は変数 $aryHeader に入ってるデータを順番に $name に代入して、
入れるデータがなくなったら繰り返し終了の構文。大丈夫、覚えてる。
参考:7日目 ヘッダ情報が見たい!知りたい!晒したい!

これをまず、for で書き換えてみよう。


8 for($i=0;$i<count($aryHeader);$i++){
9 
10  :(PHP終了タグとhtml部分中略
11   
12 <?php print($aryHeader[$i]); ?></th>
13   <td><?php print($_SERVER[$aryHeader[$i]]); ?></td>
14  
15 :(html部分とPHP開始タグ中略)
16 }



8行目。
(カッコ)内は初期化式;終了条件;増分式の順で並んでる、と前述の説明にあった。
最初に $i に 0 を代入して初期化。
次の count は初めてだ。


count命令は、指定された配列に含まれる要素の数(ここでは3)を返します。



OK。
参考書によると ”終了条件が FALSE になったタイミングで処理を終了” とのこと。
つまり、$i が 3 より小さい、という条件が成り立たなくなったら処理を終了しろってことね。
最後の $i++ は、$i に 1 を加算して代入するという意味。
参考:6日目 クッキー受け取ってください!
よし。問題ない。全く問題ない。



12行目。
$aryHeader[$i]Print しろ、と言ってる。
8行目の for 以下で指示した通り、最初は $i に 0 が入ってる。
で、++ 効果で2回目は1、3回目は2が入る。
それ以降は $i<count が成り立たなくなるのでココで終了。
よし。ちっとも不思議じゃない。予想通りだ。


13行目。
$_SERVER[$aryHeader[$i]]Print しろ、と言ってる。
[カッコ]が二重になっててイラっとするけど、怒ってはいけない。
これは確か、内側から評価するんだった。
$aryHeader[$i] については上で書いた通り。
ってことは、それを $_SERVER で取得すればいいだけ。なんだ、分かるじゃん。
12行目と連動してるので、コレも3回目で終了。
やってみよう。完全に問題ない。
サンプル:header_for.php



今度は while で書き換える。


8 $i=0;
9 while($i<count($aryHeader)){
10  
11  :(PHP終了タグとhtml部分中略)
12 
13 <?php print($aryHeader[$i]); ?></th>
14  <td><?php print($_SERVER[$aryHeader[$i]]); ?></td> 
15 
16 :(html部分とPHP開始タグ中略)
17 $i++;
18 }



while は(カッコ)内が成り立つ限り繰り返す。
つまり、$i が 3 より小さいうちはずっと処理する。
処理する内容は 以下の通り。(しつこくGIGAZINE風)


13,14行目は for の時と一緒なので省略。
で、17行目で $i++ してる。
これも ++ されて $i が 3 以下じゃなくなったら終了。
パーペキに無問題だ。
サンプル:header_while.php



最後は do...while


8 $i=0;
9 do{
10  
11  :(PHP終了タグとhtml部分中略)
12 
13 <?php print($aryHeader[$i]); ?></th>
14  <td><?php print($_SERVER[$aryHeader[$i]]); ?></td> 
15 
16 :(html部分とPHP開始タグ中略)
17 $i++;
18 }while($i<count($aryHeader));



ふむ。さっきとちょっと違う。
9行目。
まず「しろ!」と言ってる。何を?13〜17行目までの処理を。上と一緒ね。
んで、18行目で「もしアレだったら繰り返してね^^」と言ってる。
アレの内容を具体的に言うと、$i が 3 以下なら、ってこと。


while が最初に 「$i が 3 以下なら繰り返せ」って言うのに対して、
do...while は後出しだ。つべこべ言わずに、とりあえず1回は処理させる。
処理させたあとで「条件が許す限りリピートしてね☆」と言ってくる。
商売上手だな!どうだろう。そういう問題だろうか。



おっけい♪
繰り返し構文はマスターした。
忘れないように do{復習}while(ギークになるまで); な感じでがむばろーっと!


LINEで送る

7日目 ヘッダ情報が見たい!知りたい!晒したい!

  • 2007/12/09(日) 23:00:00

日記

「エントリ書くからねえぇぇー!!」

そう叫んで別れた駅の改札口。
今日は先週行けなかったあきやん宅へけんすうと一緒にパジャマでおジャマ!
や、けんすうはちゃんとした格好してたけど、紅はマジでパジャマだった。
正直、暮らす気満々だった。ごめんなさい。
けんすうと2人で 「あの部屋ぜんぜん住めるよなー!」 って盛り上がってた。なんのつもりだ。


あきやんが夕食にシチューを作って待っていてくれたよ!
カレーっぽく見えるけどシチューなの。曰くカボチャが溶けたらすぃ。
あきやんだからってカレーと判断するのは早計だ。失敬だ。
下は写メ撮影に必死こくべにぢょ。(撮影:けんすう) 

   
   


紅が昼間ブクマしたのを知ってて作ってくれた・・・( ;Д;)ウッウッ...
アルファギークはサーバだけじゃなく、女の子にも優しい。
「つーか、私たち繋がりすぎなんじゃね。」は確かにあるある。
みんなと繋がったまま街中歩くなんて、頭がフットーしそうだよっっっ!!!って感じ><
確かに頭は沸いている。悪い意味で。
前回、あきやんと飲んだとき 「切込隊長も言ってたけどさぁー。」 と↑のエントリの話をした。
若い男女が酒を飲みながらする話ではない。[だがそれがいい]
僕らはいつも以心伝心!二人の距離つなぐツイッター!! ってオレンジレンジも言ってたし♪
Web2.0の中・・・すごくあったかいナリ・・・ネト充バンザイ\(^o^)/





ヘッダ情報を晒しage隊!

先週は風邪でヘタれてて全然勉強できなかった(つд・)
通説によると紅は風邪を引かない体質のはずなんだけど。
きっとギークになったせいだと思う。まいったねこりゃ><

とゆことで、平日にやるはずだったヘッダ情報について。
これはわりとスムーズに理解できた。
スムーズすぎてあきやんがちょっぴり淋しそうだった。以後気をつけない。



ヘッダ情報を取得しよう

はてブを禁止する方法のときにちょっと触れたけど、
サーバとブラウザは普段、いろいろな情報をやり取りしてる。
参考:コレやってみたい! - べ、べつにブクマ禁止したいわけじゃないんだからっ!

サーバとやり取りする情報というとPOSTやGETを思い出すけど、
ヘッダ情報がその2つと違うのは、不可視であるという点。
事実、ネット充の紅が「ヘッダ情報ってなに?」って感じるということは、
ネットサーフィンをするだけのユーザがヘッダ情報を意識することはない。


Use-Agentヘッダを利用すれば、サイトにアクセスしてきたクライアント(ブラウザ)の種類が
わかります。(中略)
Refererヘッダを利用することで、自サイトに対してどのようなページがリンクを張っているのか
自サイト内でユーザがどのようにページ間を移動しているのかを把握できます。(中略)
Accept-Languageヘッダを利用することで、クライアントの対応言語を判定し、バイリンガルな
ページを構築することもできます。

参考:10日でおぼえるPHP5 入門教室


(・∀・)ほぅ!ちょっと楽しそう。
それじゃ早速、ソースを貼ろう。
※タグの最初は全角にしてあります。



1 <html>
2 <head><title>ヘッダ情報の取得</title></head>
3 <body>
4 <h1 style="background:#cccccc">ヘッダ情報の取得</h1>
5 <table border="0">
6 <?php
7 $aryHeader=array("HTTP_USER_AGENT","HTTP_ACCEPT_LANGUAGE","HTTP_REFERER");
8 foreach($aryHeader as $name){
9 ?>
10  <tr>
11   <th style="color:#FFFFFF;background:#0086b2;width:80pt;">
12 <?php print($name); ?></th>
13   <td><?php print($_SERVER[$name]); ?></td>
14  </tr>
15 <?php
16 }
17 ?>
18 </table>
19 </body>
20 </html>




ハッハー!見たことある関数はっけん!!
聖闘士には同じ技は二度と通用しないのだ!!なんのはなしだ。


1〜5行目はhtmlなので飛ばす。6行目からPHP。

7行目は配列だ。
$aryHeader という変数に、array 関数を使って "HTTP_USER_AGENT","HTTP_ACCEPT_LANGUAGE","HTTP_REFERER" という
3つのデータを格納してる。これは問題ない。
参考:4日目 おみくじとか作っちゃうかモナー!



8行目。
foreach というのは初めて見るな。


foreach命令
foreach(配列 as 仮変数){…ループで行う処理…}
配列の各要素の値を仮変数にセットしつつ、ループを繰り返します。
各要素には、この仮変数を介してアクセスすることができます。

参考:10日でおぼえるPHP5 入門教室


ふむふむ。
説明だけだとよく分からない。
こういう場合は、何が起こるか実際にブラウザで見てみたほうがいい。
サンプル:list_header.php


おぉ。
"HTTP_USER_AGENT","HTTP_ACCEPT_LANGUAGE","HTTP_REFERER" の3つが
順番に表示されている。
でも print は2回しか使ってない。におうな。このへんがあやしい。



9行目。
いったんPHPを閉じて、10行目からhtmlの記述が始まる。
PHPというのは、htmlと混在して書いてもおkらしい。
以前ナイス・tetsunosuke・ギークさんがトラバで教えてくれました。

// PHPの部分とHTMLは分けて書いて、必要なときだけ埋め込む

参考:ギークなお姉さんを目指すブログを友人にも紹介しようと思う。

余談だけど、この // のあとにコメント書くのってギークっぽくていいよね・・・!!!
のあとにコメントとか!すんげぇすんげぇギークっぽい!!!!
使おう。


再びhtmlは飛ばす。必要そうな参考リンクだけ貼っておく。
参考:<TABLE> ★HTMLタグリファレンス



で、12行目の print
$name を表示しろ、と言っている。
これはページの左側、<table>タグのセル<th>内に、配列で $aryHeader に代入した
"HTTP_USER_AGENT","HTTP_ACCEPT_LANGUAGE","HTTP_REFERER"
3つの文字列を順番に表示させてる。


いいね、foreach の正体をつかんだ気がする。


13行目。
$_SERVER[$name] を表示しろ、と言ってる。
$_SERVER は見たことあるな・・・そうだ。はてブ禁止方法のときに出てきた。
あのときは確か、$agent$_SERVER['HTTP_USER_AGENT'] を代入して、
if ・もしも $agent の最初の6文字がHatenaだったら・・・というコードだった。
HTTP_USER_AGENT は今回も出てきてる。
前述の参考書の説明だと、これでサイトにアクセスしてきたクライアント(ブラウザ)の
種類がわかるそうな。他にもいろいろあるらしい。

PHPでは、サーバに関する環境変数はグローバル変数$_SERVERに格納されます。
HTTP_REFERERやREMOTE_ADDR、PHP_SELFなどスクリプト構築において欠かせない
変数群を簡単に取得できるので、それぞれ暗記しておいて損はないです。

参考:PHP:$_SERVER サーバ環境変数


サンプルページを見てみる。
ページの右側、<td>セル内に、ブラウザの情報・言語情報・リファラ情報が表示されてる。



オーケー!
ってことは、foreachというのは$aryHeader に入ってるデータを順番に $name に代入して
{ 以下を繰り返せ、って意味ね。完全に把握した。


15〜17行目で、もう1度PHPで処理命令を閉じてる。閉じるためだけのPHP。


以上、終わり!
わぁい!ひとりで理解できたよできたよ!!
これ以外にも繰り返し構文をいくつかやったけど、紙面と眠気の都合上、今回は断念。
今週は仕事のスケジュール的に平日更新できるか分からんけど、できたら繰り返しの話だけ
サクっと書きたい。書く方向でがんばる。ギークの食べ物食べてがんばろう。

LINEで送る