Изчистване на таблица без Cronjob

cr0uch3rr

Registered
Здравейте,може ли да направите кода да нулира таблиците само във определения час,а не и след това защото се нулират постоянно ..
PHP:
   $time = time(); 
   $hour = 15; // Тук въвеждате час от 00 до 23 
   $min = 20; // Тук въвеждате минута от 00 до 59 
   $sec = 00; // Тук въвеждате секунда от 00 до 59 
   $dest = mktime($hour,$min,$sec); 
   if ($time >= $dest) { 
   mysql_query("TRUNCATE TABLE `top25`") or die(mysql_error());
   mysql_query("TRUNCATE TABLE `views`") or die(mysql_error());
   }
 
Това можеш да го направиш със Събития(Events) през phpmyadmin
Първо това:
Код:
SET GLOBAL EVENT_SCHEDULER = ON;
после
Код:
  CREATE EVENT top25
    ON SCHEDULE EVERY 1 HOUR
    DO
    TRUNCATE TABLE 'top25';
Малко инфо:
http://www.sitepoint.com/how-to-create-mysql-events/

https://dev.mysql.com/doc/refman/5.6/en/create-event.html
 
А този php файл/скрипт кой ще го изпълни/зареди всеки ден в 00:00 часа, за да може той да изчисти таблиците?

Пак ще ти трябва примерно крон джоб, който да изпълни файла..
 
Много по-лесно и бързо ще е през крона на цпанела. Не виждам смисъл от този 'бот'..

Правиш един cronjob в cpanela и слагаш ( всеки ден в 00:00 часа да се изпълни )
Код:
0 0 * * * /usr/local/bin/php /home/USER-A/clear.php

и вече във файла clear.php си сложи връзката към базата данни и
TRUNCATE TABLE `views`
TRUNCATE TABLE `top25`
 
Във php файла

PHP:
   <?
   
   $host = "tuka";
   $db = "tuka";
   $dbuser = "tuka";
   $dbpass = "tuka";
   
   $conn = mysql_connect($host,$dbuser,$dbpass) or die (mysql_error());
   $db = mysql_select_db($db) or die(mysql_error());
 
 mysql_query("TRUNCATE TABLE `top25`") or die(mysql_error());
   mysql_query("TRUNCATE TABLE `views`") or die(mysql_error());

?>
така ли трябва да бъде?
 
Ако ще си на споделен хостинг, използвай или Cron Jobs, или събития в MySQL. Така или иначе Cron Jobs играе ролята на бот. В определен час ти изпълнява този скрипт.
Ако си под Windows ползвай Task Scheduler.



ЕДИТ: По принцип това е достатъчно. Но, за да си сигурен, че някой няма да го отвори външно, му задай един параметър(argument) с някаква парола и крона задай тази парола.


PHP:
<?php
   
   $host = "tuka";
   $db = "tuka";
   $dbuser = "tuka";
   $dbpass = "tuka";
   
   $conn = mysql_connect($host,$dbuser,$dbpass) or die (mysql_error());
   $db = mysql_select_db($db) or die(mysql_error());
 
   if ( $argv[1] == 'key' ) {
           mysql_query("TRUNCATE TABLE `top25`") or die(mysql_error());
           mysql_query("TRUNCATE TABLE `views`") or die(mysql_error());
   }

?>

Нещо такова.

PHP:
0 0 * * * /usr/local/bin/php /home/USER-A/clear.php someKey=key

Нещо подобно. Ако трябва пусни скрипта и парсни $argv да видиш кой точно индекс ти е аргумента someKey.

Ползва се $argv, защото през конзолата не се инициализират POST и GET заявки.
 

Back
Горе