Пошаговое выполнение php-скрипта с выводом результата

Статус
В этой теме нельзя размещать новые ответы.

chapser

Гуру форума
Регистрация
12 Сен 2007
Сообщения
122
Реакции
80
Доброго времени суток.
Как сделать пошаговое выполнение php-скрипта с выводом результата выполнения шагов в реальном времени без перезагрузки страницы?
 
Это понятно, что ajax. Как реализовать? Я в этом новичок. Суть в том, что скрипт выполняет несколько операций и только после этого выводит результат разом. Нужно. чтобы после выполнения каждой операции выводился результат. Вот в чем фишка...
 
Для просмотра ссылки Войди или Зарегистрируйся
PHP:
<?php

if (ob_get_level() == 0) ob_start();

for ($i = 0; $i<10; $i++){

        echo "<br> Line to show.";
        echo str_pad('',4096)."\n";   

        ob_flush();
        flush();
        sleep(2);
}

echo "Done.";

ob_end_flush();

?>
 
Для просмотра ссылки Войди или Зарегистрируйся
PHP:
<?php

if (ob_get_level() == 0) ob_start();

for ($i = 0; $i<10; $i++){

        echo "<br> Line to show.";
        echo str_pad('',4096)."\n";  

        ob_flush();
        flush();
        sleep(2);
}

echo "Done.";

ob_end_flush();

?>
Если запускать скрипт напрямую - работает пошагово. Но, если запустить через ajax - выводит общий результат, а не по шагам. Нужно по шагам.
 
Сервер апач должен быть
Тебе как его запускать?
 
Сервер апач должен быть
Тебе как его запускать?

index.php
HTML:
<form method="post" id="myForm" name="myForm" enctype="multipart/form-data">
    <button class="btn btn-success" type="submit">Запустить</button>
</form>
       
<div id="result"></div>
<script>
$('#myForm').submit(function (evtObj) {
    evtObj.preventDefault();
    var form = $(this);
    $.ajax({
        url: 'exec.php',
        type: 'POST',
        data: form.serialize(),
            beforeSend: function() {
                $('#result').empty();
            },
            success: function (data) {
            if (data === '1') {
                $("#result").html(data);
            } else {
                $("#result").html(data);
            }
        }
    });
});
</script>
exec.php
PHP:
$current = "1 шаг";
echo outputProgress($current);

$current = "2 шаг";
echo outputProgress($current);

$current = "Выполнено";
echo outputProgress($current);

function outputProgress($current) {
    echo "<span>" . $current . "</span><br/>";
    myFlush();
    sleep(2);
}

function myFlush() {
    echo(str_repeat(' ', 256));
    if (@ob_get_contents()) {
        @ob_end_flush();
    }
    flush();
}
 
Последнее редактирование модератором:
Шаги надо делить на клиенте и на сервере через $_GET.
С клиента шлёшь поочереди ajax
Код:
?step=1
?step=2
?step=3
и так далее.
И соответственно на сервере пошагово отдавать.
PHP:
if($_GET['step']==1){
}
if($_GET['step']==2){
}
 
Последнее редактирование модератором:
ob_* функции довольно часто не работают из-за буферизации или каких-то других настроек nginx/apach. Из-за этого от них отказался и пересел на консольные скрипты :)

Поиск по packagist привёл к вот такой поделке: Для просмотра ссылки Войди или Зарегистрируйся - идея норм, реализация страшненькая.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху