Вкратце о скрипте: есть файл index.php, который инклудит файл tasks.php. Tasks.php делает зайпрос в БД на предмет есть ли задачи, которые надо исполнить в данный момент. Из БД возвращается название файла, который надо выполнить и другая инфа (период выполнения задачи, количество, последнее время). Дальше идет проверка на существование файла и если файл есть (а он естественно есть) файл инклудится. Выполняется задача, а после этого делается пометка в БД, что задача выполнена. В чем проблема: Задача определяется замечательно (запись в БД находит). Файл инклудится только после второго (двухкратного) выполнения программы... Причем программа должна быть запущена с небольшим интервалом времени. Если выполнять программу с интервалом более 6-8 секунд, то задача не выполнится вообще... Далее после псевдо-выполнения задачи оно обновляет БД и выставляет новое время выполнения задачи... Проблема решилась установкой метки внутри файла задачи о том, что она выполнена. PHP: <?php // Получаем все задачи $sql = "SELECT * FROM `ya_tasks` WHERE `date` < '".time()."' LIMIT 1;"; $query = mysql_query($sql) or include('err/sql_query.htm'); $ya_tasks = parce_mysql($query); if(count($ya_tasks) == 2) { $can_update_mysql = FALSE; if((file_exists('./sources/tasks/'.$ya_tasks[0]['tasks'])) and (trim($ya_tasks[0]['tasks']) !== '')) include('sources/tasks/'.$ya_tasks[0]['tasks']); if($can_update_mysql) // Проверка - была ли выполнена задача { if($ya_tasks[0]['times'] == '0') $sql = "UPDATE `ya_tasks` SET `date` = '".(time()+$ya_tasks[0]['interval'])."' WHERE `id` = '".$ya_tasks[0]['id']."';"; else { if($ya_tasks[0]['times'] == '1') $sql = "DELETE FROM `ya_tasks` WHERE `id` = '".$ya_tasks[0]['id']."' LIMIT 1;"; else $sql = "UPDATE `ya_tasks` SET `date` = '".(time()+$ya_tasks[0]['interval'])."', `times` = '".($ya_tasks[0]['times']-1)."' WHERE `id` = '".$ya_tasks[0]['id']."';"; } mysql_query($sql) or include('err/sql_query.htm'); } } ?> Короче спортивный интерес - почему не работало???
Хм. Тут скорее проблема в логике приложения... Извините, но истина где-то рядом... возможно вы программируете и не на php вовсе...
Похоже, где-то в бесконечный цикл выпадает… Попробуйте по кусочка выполнять задачу: найдете проблемный кусок и причину. Еще было бы неплохо убедиться, что вывод ошибок настроен по-максимуму, т.е. PHP: <?php error_reporting(E_STRICT); // PHP5 error_reporting(E_ALL); // PHP4 ?>
Ошибки настроены по максимуму. PHP 4.4.4 Код (Text): error_reporting (E_ALL); При этом никаких ошибок не возникает. Проблемый кусок тот, когда инклюдиться файл с задачей. Она возращает результат SQL в виде массива. $ya_tasks[(номер выбранной строчки)][(название столбца)]
некорректное использование time() в операциях с датой. rtfm http://dev.mysql.com/doc/refman/5.0/en/datetime.html ... если, конечно, поле date объявлено как date...
Александр Викторович извините, но что-то не складывается. вы уверяете, что база обновляется в любом случае, так? но ведь она может обновиться только если $can_update_mysql == true, а он безусловно установлен в false. и измениться он может только в подключаемом файле. то есть, если у вас происходит обновление данных, то файл подключается. ищите там.