|
PHP を使い、次の日曜日を求めるというカレンダー計算プログラムを作ってみることにする。 まず、組み込み関数 mktime や mktime を使って作るのだが、数十年以上昔の日付や数十年以上未来の日付を入力すると、必ずエラーが発生する。これは日付関数の定義域エラーによるものだが、このようなエラーはセキュリティ・ホールに繋がる恐れがあるので、何らかの対策を施す必要がある。 |
サンプル・プログラム:UNIX TIME版 |
|
|
年月日に「2008/08/25」などと入力して、「計算」ボタンをクリックしてみてほしい。 カレンダーと比較して正しい答えが計算されたろうか。 |
|
サンプル・プログラムの解説:次の日曜日を計算する |
|
|
ユーザー関数 getNextSunday は、年月日を渡すと、その日から数えて次の日曜日を計算する関数である。
仕組みは簡単。 入力された年月日を関数 mktime で UNIX TIME $thisday に変換する。 mktime は計算に失敗した場合は負数を返すので、$thisday が負数だったらエラーを返す。 次に、関数 getdate を使い、その日の曜日番号を求める。曜日番号は 0=日曜日、1=月曜日‥‥6=土曜日なので、7 から曜日番号を減じた結果を秒数に換算し、$thisday に加えれば、次の日曜日の UNIX TIME を計算することができる。
0013: /** |
|
サンプル・プログラムの解説:入力エラーチェック |
|
|
HTML フォームに入力された年月日を、関数 split を使って年、月、日に分解する。 ここで分解できなかったり、3 つの数字にならないケースはエラーとして、変数 $msg にエラー・メッセージを設定する。 次に、うまく分解できたとしても、2008 年 2 月 31 日のような異常な入力があるかもしれない。そこで、関数 checkdate を使って年月日の整合性をチェックする。 以上のエラーチェックを通過した場合のみ、ユーザー関数 getNextSunday を適用する。
0029: $yyyymmdd = $_GET['yyyymmdd']; |
|
|
|
|
|
|
2008年08月28日更新
写真と記事 (C)2008 studio pahoo
(※)本ページはリンクフリーですが、複製・転載時にはご一報ください。 |