こんにちは!
ナビゲータのEVEです。
今日中に、Knowlegeシステムの改修を終える予定でしたが、あきらめました・・・。これから予定も入っていますし、この辺にしたいと思います。
[今日の問題点〜mktime〜]
Knowlegeシステムを動かしながら改修作業を進めていくと、セッションタイムエラーになります。なんでだろう〜〜〜〜っということで、フレームワークに突っ込んで調査してみて分かったこと・・・。date関数のmaketimeがうまく動作していない・・・。
Prototype EVEでは、厳格にセッションタイムを管理したいという構想があったため、セッションタイムの管理は、フレーム側でやっています。
以下が、今回の問題のロジックなのですが、まず、文字タイプエラー・・・。
以下の$By、$Bm、$Bd、$Bh、$Bi、$Bsは、substrで文字列を切り出しているので、文字列として各変数に格納されています。その文字列をdate関数に引数として渡すとエラーになります。
//セッションタイムアウト時間を算出する
//基準日の分離(現在日付を取得する。)
$By = substr($AccessTime,0,4);
$Bm = substr($AccessTime,4,2);
$Bd = substr($AccessTime,6,2);
$Bh = substr($AccessTime,8,2);
$Bi = substr($AccessTime,10,2);
$Bs = substr($AccessTime,12,2);
//現在時間(秒)にセッションタイムアウトの秒数を加算する
$Bs = $Bs + $SessionTimeOut;
//セッションタイムアウトの時間を算出する
$getTime = date ("YmdHis", mktime ($Bh,$Bi,$Bs,$Bm,$Bd,$By));//
//セッションタイムアウトかどうか判定する(現在時刻とセッション
タイムアウト時間の比較)
if ( $nw > $getTime ) {
//セッションタイムアウトの場合、エラーステータスを設定し
呼び出し元へ制御を移す
return "E0018";
}
それでは、ということで、integer型に数値変換して渡すと、今度は、日付が1990xxxxxxxxxxxxxxって表示される・・・。現在日付に、想定しているセッションタイムの時間を加算しているのだから、1990年という日付は考えられない・・・。
ちょっと、粘ったのですが、解消される見込みがなかったので、ChatGPTに相談して以下のように変更しています。
// 現在の日時を取得
$currentDateTime = new DateTime();
//現在時間(秒)にセッションタイムアウトの秒数を加算する
$secondsToAdd = (int)$Bs + (int)$SessionTimeOut;
// 現在の日時に秒を加算
$currentDateTime->add(new DateInterval("PT{$secondsToAdd}S"));
// 加算後の日時を取得
$getTime = $currentDateTime->format("YmdHis");
//セッションタイムアウトかどうか判定する(現在時刻とセッションタイム
アウト時間の比較)
if ( $nw > $getTime ) {
//セッションタイムアウトの場合、エラーステータスを設定
し呼び出し元へ制御を移す
return "E0018";
}
これで、セッションタイムエラーは解消されました。
ただ、オブジェクト指向で作っていないプログラムに、1箇所だけオブジェクト指向のロジックを入れるのは、あまり好きではないのですが・・・。ただ、このロジックが後日問題になるとは思えませんし、このロジックで改修作業を進めます。
[あとがき]
外部キーを設定するためにはじめたシステム改修作業なのですが、途中ですがやめたくなりました。ただ、改修後は、現在自宅で更新しているKnowlegeシステムをインターネット上に公開して更新したいとか思っていたりして・・・。そのため、つい最近、「Webデザインの基本」という本を図書館から借りてきました。システムまわりには強いつもりなのですがデザイン系がイマイチです。そのため、1から勉強しようと考えていたのですが・・・?
いちばんよくわかるWebデザインの基本きちんと入門[第2版] レイアウト/配色/写真/タイポグラフィ/最新テクニック [ 伊藤 庄平 ] 価格:2640円 |
数日で改修できないという状況になりましたら、途中で放棄し、Yahooのクローニングシステムの製造に入ります・・・。もったいないけれどね・・・。
では、また!