Выполнить только один раз (PHP+MySql)
Один раз в сутки отправляется отчет о работе сайта за сутки. Делается - это просто - сверяется текущая дата, с датой последнего обращения и если дата изменилась, то проделываем соотв. действия:
Так вот, при большой посещаемости сайта, отчет высылается несколько раз!!! Надо какой-то Lock сделать, а какой ?? так чтоб и красиво, и просто, и гибко.
Код:
$r=mysql_query("SELECT DATE_FORMAT(last,'%d') FROM counter where id='$login'");
if (mysql_result($r,0,0)!=date("d")) {
$date=date("Y-m-d H:i:s",mktime(0,0,0,date("m") ,date("d")-1,date("Y")));
$r=mysql_query("SELECT id,hits,hosts,users FROM counter");
for ($i=0;$i<mysql_num_rows($r);$i++) {
$id=mysql_result($r,$i,0);
$hits=mysql_result($r,$i,1);
$hosts=mysql_result($r,$i,2);
$users=mysql_result($r,$i,3);
mysql_query("INSERT INTO counter_total set id='$id',hits='$hits',hosts='$hosts',date='$date', users='$users';");
}
$sdays=intval($COUNTER["savelog"]);if ($sdays<1 || $sdays>30) $sdays=30;
mysql_query("UPDATE counter SET hits=0, hosts=0, users=0");
nmail();
}
if (mysql_result($r,0,0)!=date("d")) {
$date=date("Y-m-d H:i:s",mktime(0,0,0,date("m") ,date("d")-1,date("Y")));
$r=mysql_query("SELECT id,hits,hosts,users FROM counter");
for ($i=0;$i<mysql_num_rows($r);$i++) {
$id=mysql_result($r,$i,0);
$hits=mysql_result($r,$i,1);
$hosts=mysql_result($r,$i,2);
$users=mysql_result($r,$i,3);
mysql_query("INSERT INTO counter_total set id='$id',hits='$hits',hosts='$hosts',date='$date', users='$users';");
}
$sdays=intval($COUNTER["savelog"]);if ($sdays<1 || $sdays>30) $sdays=30;
mysql_query("UPDATE counter SET hits=0, hosts=0, users=0");
nmail();
}
Цитата:
Originally posted by mike
Необходим выполнить некоторое действие только один раз.
Один раз в сутки отправляется отчет о работе сайта за сутки. Делается - это просто - сверяется текущая дата, с датой последнего обращения и если дата изменилась, то проделываем соотв. действия:
Так вот, при большой посещаемости сайта, отчет высылается несколько раз!!! Надо какой-то Lock сделать, а какой ?? так чтоб и красиво, и просто, и гибко.
Необходим выполнить некоторое действие только один раз.
Один раз в сутки отправляется отчет о работе сайта за сутки. Делается - это просто - сверяется текущая дата, с датой последнего обращения и если дата изменилась, то проделываем соотв. действия:
Так вот, при большой посещаемости сайта, отчет высылается несколько раз!!! Надо какой-то Lock сделать, а какой ?? так чтоб и красиво, и просто, и гибко.
Код:
$r=mysql_query("SELECT DATE_FORMAT(last,'%d') FROM counter where id='$login'");
if (mysql_result($r,0,0)!=date("d")) {
$date=date("Y-m-d H:i:s",mktime(0,0,0,date("m") ,date("d")-1,date("Y")));
$r=mysql_query("SELECT id,hits,hosts,users FROM counter");
for ($i=0;$i<mysql_num_rows($r);$i++) {
$id=mysql_result($r,$i,0);
$hits=mysql_result($r,$i,1);
$hosts=mysql_result($r,$i,2);
$users=mysql_result($r,$i,3);
mysql_query("INSERT INTO counter_total set id='$id',hits='$hits',hosts='$hosts',date='$date', users='$users';");
}
$sdays=intval($COUNTER["savelog"]);if ($sdays<1 || $sdays>30) $sdays=30;
mysql_query("UPDATE counter SET hits=0, hosts=0, users=0");
nmail();
}
if (mysql_result($r,0,0)!=date("d")) {
$date=date("Y-m-d H:i:s",mktime(0,0,0,date("m") ,date("d")-1,date("Y")));
$r=mysql_query("SELECT id,hits,hosts,users FROM counter");
for ($i=0;$i<mysql_num_rows($r);$i++) {
$id=mysql_result($r,$i,0);
$hits=mysql_result($r,$i,1);
$hosts=mysql_result($r,$i,2);
$users=mysql_result($r,$i,3);
mysql_query("INSERT INTO counter_total set id='$id',hits='$hits',hosts='$hosts',date='$date', users='$users';");
}
$sdays=intval($COUNTER["savelog"]);if ($sdays<1 || $sdays>30) $sdays=30;
mysql_query("UPDATE counter SET hits=0, hosts=0, users=0");
nmail();
}
Спасибо, это мне подходит!