2016-04-25 4 views
0

Я пытаюсь обновить информацию на переднем конце во время обработки на заднем конце. Для этой цели я использую функцию php flush.Данные флеша в сложном цикле php

Моего код

foreach ($csv_array as $row) { 
    $varint=$varint+1; 
    $curr_id = $row['Item']; 
    $toret['row_num']=$varint; 
    $toret['curr_url']=$curr_id; 

    echo json_encode($toret); 
    flush(); 

    $this->scrape_one_id($curr_id); 
    $value['arrow_id']=$curr_id; 
    $this->ahm->insert_new_id($curr_id); 
    $this->ahm->insert_current($value); 
} 

Я пробовал во многих отношениях, но он только посылает обратно первое эхо только и отправляет остаток после завершения выполнения закончено. Он отлично работает, если комментарий scrape_one_id.

Некоторые из методов, которые я попробовал, являются:

foreach ($csv_array as $row) { 
    $varint=$varint+1; 
    $curr_id = $row['Item']; 
    $toret['row_num']=$varint; 
    $toret['curr_url']=$curr_id; 

    echo json_encode($toret); 
    if(ob_get_level() > 0) ob_flush(); 
    $content = ob_get_clean(); 
    flush(); 
    if(ob_get_level() > 0) ob_clean(); 

    $this->scrape_one_id($curr_id); 
    $value['arrow_id']=$curr_id; 
    $this->ahm->insert_new_id($curr_id); 
    $this->ahm->insert_current($value); 
} 

Он также работал хорошо без scrape_one_id функции

Любой вид помощи будет оценено.

+0

Просто прочитайте несколько предостережений здесь - http://php.net/manual/en/function.flush.php – Legionar

ответ

0

Я бы постарался добавить туда ob_flush().

Редактировать: в вашем первом коде просто поместите ob_flush() после первого сброса() и посмотрите, как это работает.

http://php.net/manual/en/function.flush.php

заподлицо() не может быть в состоянии перекрыть схему буферизации сервера веб и это не имеет никакого эффекта на любой стороне клиента буферизации в браузере. Он также не влияет на выходную буферизацию пользовательского пространства PHP . Это означает, что вам нужно будет вызвать оба ob_flush() и flush(), чтобы очистить выходные выходные буферы, если вы их используете.

+0

Существует код 'ob_flush()' ... – Legionar

+0

во втором коде, с условиями ... я был говоря о первом исходном коде. обновил мой ответ. – ZARk

+0

@ZARk Я тоже пробовал это. – SSMA

0

Я хотел бы отметить, что существует функция для замены ob_flush и flush. Если вы установили ob_implicit_flush(true); в верхней части страницы, он автоматически очистит любое эхо или распечатает в остальной части скрипта.

Обратите внимание, что вам по-прежнему требуется минимальный объем данных, которые необходимо пройти через фильтр браузера. Я бы посоветовал использовать str_pad($text,4096);, так как это автоматически расширяет текст с пробелами до 4 КБ, что является минимальным пределом при использовании FireFox и Linux.

Вы должны прочитать manual (оговорки), а также комментарии там.

Надеюсь, это вам поможет.

+0

Я тоже попробовал 'ob_implicit_flush'. Но это дает мне тот же результат. 1-й выход в порядке, все остальные находятся на завершении выполнения. – SSMA

+0

Вы также использовали 'str_pad'? – Legionar

+0

Да, я тоже это пробовал. Первый вывод соответствует 50 или 60 символам, и он печатается немедленно, но все остальные печатаются только после полного выполнения. – SSMA

Смежные вопросы