php
2013-06-20 3 views 0 likes 
0

У меня есть фрагмент кода, как это:Вывод сообщений после каждого шага выполнения кода

$response = "<div style='font-size:18px;margin-top:2em;text-align:center;color:#173f5f;>"; 
$response .= "Intializing sequence..."; 
    echo $response; 
    $response .= "Starting compression of folders..."; 
    echo $response; 
    $response .= "Compressing all photos now..."; 
    echo $response; 
    $ph = compress('photos'); 
    $response .= "Photo compression complete."; 
    $response .= "Compressing all signatures now..."; 
    echo $response; 
    $sg = compress('signatures'); 
    $response .= "Signature compression complete."; 
    $response .= "Compressing all excel files now..."; 
    echo $response; 
    $excel = compress('uploads'); 
    $response .= "Excel files compression complete.</div>"; 
    echo $response; 

я хочу сообщения, которые будут отображаться после каждой строки вызова compress функции, но прямо сейчас, его запуск при каждом вызове функций в связке, а затем отображать сообщения в связке в конце, что тоже каждая строка повторяется.

Как я могу это решить?

+0

Кто-то Пожалуйста, руководствуйтесь тем, чтобы сделать это в режиме реального времени .. – coder101

ответ

0

Я думаю, что другие упустили точку вопроса. Вы хотите, чтобы каждая строка каждого отображалась в «реальном времени» по мере обработки скрипта, а не завершения выполнения. PHP по умолчанию не выводит буфер до завершения выполнения сценария или заполнения буфера.

Вы можете вручную сбросить буфер на экран, если хотите использовать эту функцию.

function fcflush() 
{ 
    static $output_handler = null; 
    if ($output_handler === null) { 
     $output_handler = @ini_get('output_handler'); 
    } 
    if ($output_handler == 'ob_gzhandler') { 
     // forcing a flush with this is very bad 
     return; 
    } 
    flush(); 
    if (function_exists('ob_flush') AND function_exists('ob_get_length') AND ob_get_length() !== false) { 
     @ob_flush(); 
    } else if (function_exists('ob_end_flush') AND function_exists('ob_start') AND function_exists('ob_get_length') AND ob_get_length() !== FALSE) { 
     @ob_end_flush(); 
     @ob_start(); 
    } 
} 

И вы используете его в вашем коде, как этот

echo "<div style='font-size:18px;margin-top:2em;text-align:center;color:#173f5f;>"; 
fcflush(); 
echo "Intializing sequence..."; 
fcflush(); 
echo "Starting compression of folders..."; 
fcflush(); 
echo $response .= "Compressing all photos now..."; 
fcflush(); 
    $ph = compress('photos'); 
echo "Photo compression complete."; 
fcflush(); 
echo "Compressing all signatures now..."; 
fcflush(); 
    $sg = compress('signatures'); 
echo "Signature compression complete."; 
fcflush(); 
echo "Compressing all excel files now..."; 
fcflush(); 
    $excel = compress('uploads'); 
echo "Excel files compression complete.</div>"; 
fcflush(); 

Также просто эхо из линии непосредственно ratehr чем назначая их $ ответ, то вторя, что.

+0

У вас все в порядке. понимал, что я действительно хочу, вывод сообщения в реальном времени, но я пробовал ваш код и после нажатия кнопки, когда браузер перенаправлен на этот php-код, его завершение в связке снова и на этот раз даже не отображало ничего. – coder101

+0

Он не должен делать так, как вы вызываете функцию, а функция находится в вашем коде. если это тогда, то вы используете какую-то форму кеша или вы устанавливаете буферизацию еще где-то в вашем коде? функция fcflush() заставляет буферы очищаться до экрана и, таким образом, дает вид реального времени в качестве обработки. – Dave

+0

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

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