プロが教えるわが家の防犯対策術!

いつもお世話になってます。


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

よろしくお願いします。

A 回答 (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());//アクセスログ更新
?>
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。

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

本当にありがとうございました。

お礼日時:2007/08/15 11:08

初期化処理は、


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

お返事ありがとうございます。

Web上で実行する形を想定していました。
レンタルサーバー上のデータを初期化したいので、バッチ処理は無理そうだったのでPHPでなんとか「さも自動であるかのように」初期化したかったのです。

説明不足で申し訳ありませんでした。

お礼日時:2007/08/15 11:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!