За последние 24 часа нас посетили 49790 программистов и 1757 роботов. Сейчас ищут 787 программистов ...

include, require работает через раз

Тема в разделе "Прочие вопросы по PHP", создана пользователем Александр Викторович, 14 май 2007.

  1. Александр Викторович

    Александр Викторович Активный пользователь

    С нами с:
    14 май 2007
    Сообщения:
    3
    Симпатии:
    0
    Адрес:
    Жодино
    Вкратце о скрипте:
    есть файл index.php, который инклудит файл tasks.php. Tasks.php делает зайпрос в БД на предмет есть ли задачи, которые надо исполнить в данный момент. Из БД возвращается название файла, который надо выполнить и другая инфа (период выполнения задачи, количество, последнее время). Дальше идет проверка на существование файла и если файл есть (а он естественно есть) файл инклудится. Выполняется задача, а после этого делается пометка в БД, что задача выполнена.

    В чем проблема:
    Задача определяется замечательно (запись в БД находит). Файл инклудится только после второго (двухкратного) выполнения программы... Причем программа должна быть запущена с небольшим интервалом времени. Если выполнять программу с интервалом более 6-8 секунд, то задача не выполнится вообще...
    Далее после псевдо-выполнения задачи оно обновляет БД и выставляет новое время выполнения задачи...

    Проблема решилась установкой метки внутри файла задачи о том, что она выполнена.

    PHP:
    1.  
    2. <?php
    3.  
    4. // Получаем все задачи
    5. $sql = "SELECT * FROM `ya_tasks` WHERE `date` < '".time()."' LIMIT 1;";
    6. $query = mysql_query($sql) or include('err/sql_query.htm');
    7. $ya_tasks = parce_mysql($query);
    8.  
    9. if(count($ya_tasks) == 2)
    10. {
    11.     $can_update_mysql = FALSE;
    12.     if((file_exists('./sources/tasks/'.$ya_tasks[0]['tasks'])) and (trim($ya_tasks[0]['tasks']) !== ''))
    13.         include('sources/tasks/'.$ya_tasks[0]['tasks']);
    14.  
    15.  
    16.     if($can_update_mysql) // Проверка - была ли выполнена задача
    17.     {
    18.         if($ya_tasks[0]['times'] == '0')
    19.             $sql = "UPDATE `ya_tasks` SET `date` = '".(time()+$ya_tasks[0]['interval'])."' WHERE `id` = '".$ya_tasks[0]['id']."';";
    20.         else
    21.         {
    22.             if($ya_tasks[0]['times'] == '1')
    23.                 $sql = "DELETE FROM `ya_tasks` WHERE `id` = '".$ya_tasks[0]['id']."' LIMIT 1;";
    24.             else
    25.                 $sql = "UPDATE `ya_tasks` SET `date` = '".(time()+$ya_tasks[0]['interval'])."', `times` = '".($ya_tasks[0]['times']-1)."' WHERE `id` = '".$ya_tasks[0]['id']."';";
    26.         }
    27.         mysql_query($sql) or include('err/sql_query.htm');
    28.     }
    29. }
    30.  
    31. ?>
    32.  
    Короче спортивный интерес - почему не работало???
     
  2. Davil

    Davil Guest

    Хм. Тут скорее проблема в логике приложения...
    Извините, но истина где-то рядом... возможно вы программируете и не на php вовсе...
     
  3. AlexGousev

    AlexGousev Активный пользователь

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    Похоже, где-то в бесконечный цикл выпадает…
    Попробуйте по кусочка выполнять задачу: найдете проблемный кусок и причину. Еще было бы неплохо убедиться, что вывод ошибок настроен по-максимуму, т.е.
    PHP:
    1. <?php
    2. error_reporting(E_STRICT); // PHP5
    3. error_reporting(E_ALL); // PHP4
    4. ?>
     
  4. stas_t

    stas_t Активный пользователь

    С нами с:
    24 апр 2007
    Сообщения:
    500
    Симпатии:
    0
    Адрес:
    Courbevoie, France
    что такое parce_mysql ($query) и что оно возвращает? можно код?
     
  5. Александр Викторович

    Александр Викторович Активный пользователь

    С нами с:
    14 май 2007
    Сообщения:
    3
    Симпатии:
    0
    Адрес:
    Жодино
    Ошибки настроены по максимуму. PHP 4.4.4
    Код (Text):
    1. error_reporting  (E_ALL);
    При этом никаких ошибок не возникает.

    Проблемый кусок тот, когда инклюдиться файл с задачей.

    Она возращает результат SQL в виде массива.
    $ya_tasks[(номер выбранной строчки)][(название столбца)]
     
  6. stas_t

    stas_t Активный пользователь

    С нами с:
    24 апр 2007
    Сообщения:
    500
    Симпатии:
    0
    Адрес:
    Courbevoie, France
  7. Александр Викторович

    Александр Викторович Активный пользователь

    С нами с:
    14 май 2007
    Сообщения:
    3
    Симпатии:
    0
    Адрес:
    Жодино
    Объявлено как integer; =(
    Вообще в замешательстве...
     
  8. stas_t

    stas_t Активный пользователь

    С нами с:
    24 апр 2007
    Сообщения:
    500
    Симпатии:
    0
    Адрес:
    Courbevoie, France
    Александр Викторович
    извините, но что-то не складывается. вы уверяете, что база обновляется в любом случае, так? но ведь она может обновиться только если $can_update_mysql == true, а он безусловно установлен в false. и измениться он может только в подключаемом файле. то есть, если у вас происходит обновление данных, то файл подключается. ищите там.