Intereting Posts
Файл изображения, успешно загруженный с помощью приложения Google App Engine, не существует в ведре Не удается отправить письма только в Hotmail. (gmail и т. д. отлично работает) Структура данных MySQL по сравнению с рассчитанными данными для данных типа Checkbox поделиться одним и тем же файлом cookie между двумя веб-сайтами с помощью расширения PHP cURL Списки рассылки PHP (25K-100K) Magento 1.9.2.1 настраиваемый модуль 404 POST 405 (метод не допускается) при попытке отправить запрос AJAX – Laravel 4 Изучение OO-кодирования с помощью PHP, статические! = Выражения, но в руководстве PHP говорится, что все, что имеет значение, является выражением, смущенным Как запланировать в php php взорвать все символы LIMIT приводит к MySQL? Оптимизированный метод сравнения IP-адресов с подстановочными знаками в PHP? PHP: curl_setopt_array сообщает "массив преобразованию строки" Fancybox 2 в iframe на странице facebook с загрузкой страницы PDO «Необрученное исключение» PDOException ».. Невозможно выполнить запросы, в то время как другие небуферизованные запросы активны. Рассмотрим использование PDOStatement :: fetchAll (). "

изменить значение через 24 часа

Как я могу изменить значение в базе данных mysql через 24 часа? Требуется ли пользователю посетить веб-сайт для запуска запроса? Например, у меня есть столбец с именем «user-rank», и его значение равно «10», я хочу, чтобы это было «20» через 24 часа …

Crontab aka CRON – это наиболее гибкое решение, но вам нужно иметь права использовать его в оболочке или конкретной панели управления, так как многие хостинг-провайдеры не любят делиться привилегиями по причине безопасности.

Сначала создайте код обновления скрипта скрипта PHP, примерно так:

<?php //connect to database //.... //prepare MySQL query $sql = "UPDATE myTable SET `user-rank` = `user-rank` + 10"; //execute query and handle errors //... //optinal reporting on e-mail //... //end ?> 

Затем вам нужно добавить запись в crontab, вызвав «crontab -e» в оболочке, вставьте свой код так и сохраните изменения:

 0 0 * * * /usr/bin/php -f /path/to/my_update_script.php > /dev/null 

Эта запись будет определять вызов скрипта каждый день в полночь (время сервера) и игнорировать любой вывод из сценария.

ПРИМЕЧАНИЕ. Вам нужно указать точный путь для двоичного файла php, который может отличаться для разных ОС или пользовательского профиля. Проверьте его с помощью команды « who php ».

————— ОБНОВИТЬ —————

Решение без crontab.

Создайте новую таблицу базы данных php_cron и вставьте начальную запись (сначала и только одну) со следующим кодом MySQL:

 CREATE TABLE `php_cron` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `last_ts` datetime DEFAULT NULL, PRIMARY KEY (`id`) ); INSERT INTO `php_cron` (`id`, `last_ts`) VALUES (1,'2012-08-10 00:00:00'); 

Затем создайте новый скрипт PHP, который будет содержать всю необходимую логику для такой задачи и включить его в ваш основной файл index.php или в другие места, где он может быть загружен каждый раз, когда пользователь посещает ваш сайт, например, в каком-то конфиге или подобном скрипте. Я полагаю, что у вас будет по крайней мере один посетитель в день.

Этот новый скрипт должен выполнить две задачи: сначала запросить таблицу php_cron и рассчитать разницу во времени, а если разница больше 24 часов (86400 секунд), тогда выполните код для обновления рейтинга пользователя и сохраните новую временную метку в базе данных.

Этот сценарий может выглядеть так:

 <?php //connect to database //.... //get time difference in seconds from last execution $sql1 = "SELECT TIME_TO_SEC(TIMEDIFF(NOW(), last_ts)) AS tdif FROM php_cron WHERE id=1"; $res1 = mysql_query($sql1) or die("[1] MySQL ERROR: ".mysql_error()); $dif = mysql_fetch_assoc($res1['tdif']); if ($dif >= 86400) { //24h //following code will run once every 24h //update user's page rank $sql2 = "UPDATE myTable SET `user-rank` = `user-rank` + 10"; mysql_query($sql2) or die("[2] MySQL ERROR: ".mysql_error()); //update last execution time $sql3 = "UPDATE php_cron SET last_ts = NOW() WHERE id=1"; mysql_query($sql3) or die("[3] MySQL ERROR: ".mysql_error()); } ?> 

Этот сценарий не является точным временем, как CRON, но, безусловно, будет выполняться один раз в день. Это может быть исправлено с помощью некоторой логики php / mysql, но я уверен, что это сработает.

Общим решением является создание задания cron для периодического запуска скрипта для обновления всех необходимых обновлений.

Вы можете либо настроить что-то, что запускает запрос, проверяя базу данных в течение последнего времени выполнения, а затем вы можете запустить запрос (все это, когда кто-то посещает сайт). Или вы можете настроить работу cron.

В зависимости от вашей версии MySQL вы можете использовать события.

Сначала отредактируйте файл crontab (в терминале)

 crontab -e 

Добавьте эту строку в файл:

 0 0 * * * php /var/www/myquery.php 

Первый 0 означает минуту 0, а второй нуль означает 0h. Другие звезды означают, что работа будет выполняться каждый день.

В файле myquery.php вы помещаете некоторый php, который будет подключаться к вашей базе данных и который выполнит требуемый запрос.

Это способ сделать это на Linux-системах.