2005年02月09日

[底]PHPショック!

 何がショックってうまく組上がらないのがショックなのですが。おかげでタイ出発前夜に課題で徹夜しそうです。ここのところ課題で徹夜するシーンが増えてきたなぁ‥‥。
 今回は応用Webプログラミングの課題で、PHPについてです。PHP?という向きは今回大変お世話になった『php spot』さんを参照して下さい。ちなみに今回こちらで紹介されていたツールを使わせていただきました。感謝!

 課題の内容は以前作った動画ファイルを利用したウェブ教材の改造で、Cookieセッション情報、そしてファイルの読み込みと書き出しの3点がポイントです。

 とりあえず扉ページをさくっと作って、ユーザー名をCookieに書き出すところから。最初に時間をCookie管理にしようとして少々時間を使いましたが、時間の方をセッションで処理することにしたら、ユーザー名のスクリプト自体は教科書や『php spot』さんを参考に、比較的簡単に組めました。が、ここで不可解な現象が。明らかにCookieは作動しているんですが、Cookieのファイルが存在しないんです。大抵C:\Documents and Settings\ユーザー\Cookiesに全部突っ込まれるはずなんですが、ローカルでやっているせいか、ローカルドライブ全部に検索かけても見あたりません。差しあたり正常動作をしてるのでそれ以上の探索は放棄
 この部分、最初は「クッキーの中身を見て、打ち込まれた内容を見て、違ったら打ち込まれた方をクッキーに上書き」という形でやってたんですが、そうすると次のページからリンクを辿って戻った時にユーザー名が消えちゃうんですね。なのでその部分はコメントアウトして先に進みました。
 この後、表示させていた総時間を表示させるのに少し手間取りましたが、とりあえず1つ目は終了。これをAタイプとして、2つ目のBタイプに取りかかります。

 次が大変。差しあたりCookieにユーザー名と時間の両方を保存させることにして、そのための方策を考えます。Cookieってやつは1個に1つの情報しか入らないので、複数の情報を保存したければCookieを複数作るか、情報を1つにまとめるかの2種類があります。まずCookie2個作戦を実行したところ、1個しか生成できないことがわかり(どっちにしても実体が見えないのですが)挫折。2つの情報を1つにまとめることにします。
 まとめるだけなら簡単で、「username+logintime」という形で保存しておいて、後で読み出して+のところで2つに分けてそれぞれに使えばいいんです。が、Cookieがあるかどうかはわかりませんから、あればそれを使い、なければ入れたばかりの情報で新たに作成、ということになります。ここが難関
 どうもうまく情報が2つに割れてくれない上、試行錯誤をしている内にふとした弾みでCookieが上書き不能になってしまい、にっちもさっちもいかなくなってしまいました。ユーザー名が「2」から動きません。頭もいい具合にヒートアップしてきたので、クールダウンのため風呂休憩。

 やっぱり入浴するとかなりリラックスできますね。で、戻ってからこの部分の問題を冷静に考えることができたので、戻るリンクを消すことでユーザー名消滅を防ぐことにしました。該当箇所を消さずにコメントアウトしておいたのが幸いして、#を3つ消すだけでPHPスクリプト部分は復帰。
 さらにCookieを保存する時に、1個のCookieの中で複数の情報を入れられることがわかり、光明が見えてきました。ナイス風呂!

 が、ここまで来て大変な勘違いに気付きました。課題の中身は アクセスごとに利用する時間をサーバ上に記録 すべしというものなんですが、それを必死でCookie使って実現しようとしてたんです。Cookieはサーバではなくクライアントに保存する仕組みだー‥‥何か外部ファイル使ってCGIみたいに保存しなきゃいけないんだー‥‥ということ。ぐんにゃり(脱力)。
 というわけで、これまで頑張ってたBタイプのファイルは全て廃棄‥‥するのはもったいないので横に置いといて、Cタイプを新たに作ります。

 CタイプではPHPを使った掲示板の例があったのでガンガン丸写しさせていただくことにしました。既に効率命モード。
 でもアクセス時間をtime()で取っていたので、経過時間を取る時にはそれで充分だったんですが現在時刻を調べるには不向きです。それに気付かずに実行してみたら 307744時18464650分にログイン! というわけのわからないメッセージが出てしまい、ようやく発覚。しかもちょっと見てみたらdate()という便利な関数があるんですね。これならdate("H:i:s")と書くだけで現在時分秒が取得できちゃいます。
 それが終わればかなりスピーディーでした。何度やってもうまくいきますし、AタイプとCタイプの間でのCookieの共有もちゃんとできてます。なんとか徹夜はまぬがれました‥‥。

 ということで明日からバンコクです。まだ荷物作ってないのでこれから荷物作って軽く寝て、7時過ぎに出立。帰ってくるのは23日の予定です。

 が、この予定が今回の課題で崩れました。こんなに手間取るとは思ってなかったので半日でちゃっと仕上げて出せばいいやー、ぐらいに思ってたんですが、日付変わるほど時間食ったせいで期日までにサーバーにアップできなくなっちゃったんですね。家から大学のPCにアクセスできないのです。かつ、僕の借りているレンタルサーバは全て無料なのでPHP使用不可。アップしても動きません。
 先生に一応「メールで提出でも良いですか?」とお願いはしておいたものの、設置まで含めて課題だから、と斬り捨てられればそれまでですし、この単位も無いと卒業できないので、ひょっとしたら19日(土)の便で帰ってくるかもしれません。席があればね。実は完成してても結構ヤバい状況下なのです。

 とりあえず明日までに返事が来る可能性は0に限りなく近いので、明後日辺りには旅行社に行って空席探します。あああ馬鹿くさい。でも自分のせいだし‥‥。
posted by alohz at 02:16| バンコク | Comment(0) | TrackBack(0) | com/net | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.seesaa.jp/tb/1874365

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。