несколько экземпляров функции php

0

У меня есть функция, которая вычисляет некоторые данные из таблицы, помещает ее в другую, она занимает некоторое время для всего процесса, около 30 минут или что-то в этом роде. Функция вычисляет статистику за каждый день в течение нескольких месяцев, но после 10 дней она запускает другой поток, продолжая еще один, а затем другой, и другой, поэтому в конце концов я получаю таблицу, полную случайного дерьма.

Почему он запускает другой экземпляр функции, а другой еще не закончен?

Здесь функция:

function build_fill_array() {

$sql = db_fetch_object(db_query("SELECT min(timestamp) as min FROM {accesslog}"));
$nids = db_query("SELECT nid FROM {node} WHERE type='raamat'");
while($nid_array = db_fetch_array($nids)) {
    $nid[] = $nid_array['nid'];
}
$start_ts = $sql->min;
$end_ts = mktime(0,0,0, date('m'), date('d'), date('Y'));
$start_ts = mktime(0,0,0, date('m', $start_ts), date('d', $start_ts), date('Y', $start_ts));

while($start_ts != $end_ts) {
    $day = date('d.m.Y', $start_ts);
    $range_from = mktime(0,0,0, date('m', $start_ts), date('d', $start_ts), date('Y', $start_ts));
    $range_to = mktime(23,59,59, date('m', $start_ts), date('d', $start_ts), date('Y', $start_ts));
    foreach($nid as $n) {
    $results = db_fetch_object(db_query("SELECT count(hostname) as total, count(distinct hostname) as visits FROM {accesslog} WHERE timestamp BETWEEN %d AND %d AND path = 'node/%d'", $range_from, $range_to, $n));
    $sql_insert = "INSERT INTO {statistics_view} (`id`, `nid`, `total`, `unique`, `timestamp`, `date`) VALUES (NULL, $n, $results->total, $results->visits, ".mktime().", '$day');";
    db_query($sql_insert); 
  }


    $start_ts = mktime(0,0,0, date('m', $start_ts), date('d', $start_ts)+1, date('Y', $start_ts));
}

}

Изменить: не обращайте внимания на имена {} вокруг таблиц, это вещь drupal.

  • 1
    Какой у Вас вопрос?
  • 1
    Почему он запускает другой экземпляр функции, пока другой не завершен
Показать ещё 3 комментария
Теги:

2 ответа

1

Почему он запускает другой экземпляр функции, а другой еще не закончен?

Вы должны посмотреть, где вызывается функция, а не сама функция.

0

Заменить

while($start_ts != $end_ts) {

с:

while($start_ts <= $end_ts) {
  • 0
    не помогло, теперь придется ждать час, чтобы закончить :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню