• ベストアンサー

毎週日曜22:00に処理を実行したい

いつもお世話になってます。 毎週日曜日22:00に特定のデータを初期化するようなものを作りたいのですが、 何か良い方法はないでしょうか。 PHPで、「前回のアクセス日時と、今回のアクセス日時の間に、日曜日22:00が含まれている」時に処理を実行するスタイルを思いつきましたが、いまいちコードのイメージが沸いてきません。 strtotimeの引数で「last Sunday 22:00」としてみましたが、この場合だと日曜日の22:01~23:59の間にアクセスすると先週の日曜日22:00のタイムスタンプを返されてしまいました。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

通常、定期的に作動させるプログラムはLinuxではcronを使います。 サーバの時計で日曜日の22:00丁度にプログラムを走らせる事が出来ます。 Windowsではタスクスケジューラですね。 例えばcronの場合は 0 22 * * 0 wget http://localhost/hogehoge.php のように登録しておけば毎週日曜日の22時丁度にhogehoge.phpが作動されます。 もっと厳密でなくても、アクセスがあった時で良い、と言う事でしたら、簡単なプログラムで実装出来ると思います(今回はそのようですね)。 > 前回のアクセス日時と、今回のアクセス日時の間に、日曜日22:00が含まれている と言うより、 > 前回のアクセス日時は直前の日曜日の22:00より前 であった時に初期化されれば良いのではないでしょうか。 アクセスログファイルを alog.txtとし、そこにUNIX TIMEでログを更新しているとすれば、こんな感じで良いのではないでしょうか。 <?php $fname = "alog.txt"; $lastAccess = file_get_contents($fname); $w = (date("w") == 0 && date("G") < 22 )? 7 : date("w");//日曜日の22時以前だけは先週なので7 $lastSundayTime = mktime(22,0,0,date("m"),date("d")-$w,date("Y")); if($lastAccess < $lastSundayTime){ //初期化 } file_put_contents($fname, time());//アクセスログ更新 ?>

mihosaku3
質問者

お礼

お返事ありがとうございます。 とても実用的なソースコードを載せていただいてありがとうございます。 頭の中ではとても複雑に条件式を組み込んでいたのにこんなに簡単に実現できるなんて驚きです。 本当にありがとうございました。

その他の回答 (1)

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.1

初期化処理は、 A)WEB上で実行する B)バッチ処理で実行する C)DBのプロシジャを実行する どんな形をお考えでしょうか? B)C)については、それぞれの実行ファイルをタスクスケジューラに登録し、日曜22時を指定すれば可能です。 A)については、キーロガーツール(UWSCなど) http://www.vector.co.jp/magazine/softnews/060627/n0606273.html​ で、実際の操作を記録・保存し、あとは、B)C)同様にタスクスケジューラに登録すれば、日曜22時に保存されている操作を再生してくれます。

mihosaku3
質問者

お礼

お返事ありがとうございます。 Web上で実行する形を想定していました。 レンタルサーバー上のデータを初期化したいので、バッチ処理は無理そうだったのでPHPでなんとか「さも自動であるかのように」初期化したかったのです。 説明不足で申し訳ありませんでした。

関連するQ&A

専門家に質問してみよう