powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Вывод информации в цикле с обновлением страницы на PHP
13 сообщений из 13, страница 1 из 1
Вывод информации в цикле с обновлением страницы на PHP
    #38403466
Random2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В коде PHP есть функция, которая может выполняться длительное время - минимум 30 секунд, максимум - десятки минут. Во время выполнения этой функции в цикле на страницу выводится некоторая инфа, отображающая процесс выполнения. Но пока весь php скрипт не выполнится пользователь не увидит этой инфы. Как сделать чтобы при каждой итерации цикла инфа на странице обновлялась? Поискав решение проблемы нашел, что это можно сделать только на AJAX. Можно ли это сделать средствами только PHP?
...
Рейтинг: 0 / 0
Вывод информации в цикле с обновлением страницы на PHP
    #38403477
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно через iframe
...
Рейтинг: 0 / 0
Вывод информации в цикле с обновлением страницы на PHP
    #38403481
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stomp =)
...
Рейтинг: 0 / 0
Вывод информации в цикле с обновлением страницы на PHP
    #38403613
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Random2Можно ли это сделать средствами только PHP?Нет, однозначно.
...
Рейтинг: 0 / 0
Вывод информации в цикле с обновлением страницы на PHP
    #38403750
Random2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если нельзя сделать только на PHP, каким образом это можно сделать и на чем? К примеру, накидал простой код. При загрузке страницы вызывается функция, в которой в цикле выводится значение переменной с задержкой в 1сек. Но все равно, вижу результат работы только после выполнения всей функции. Как уже не пробовал - и глобальную переменную объявлял, считывая значение по таймеру и еще несколько способов - не получается. Искал инфу, статьи, доки, но знать бы точно что искать и где - было бы уже легче.

Вот мой код:
index.php
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
        <script type="text/javascript" src="jquery.js"></script>  
    </head>
    <body>
        <p>Content:</p>
        <div id="content"></div>


        <script>  
            function test()  
            {  
                alert("test started");
                $.ajax({                    
                    url: "test.php",  
                    cache: false,  
                    success: function(html)
                    {  
                        $("#content").html(html);  
                        alert("test success");
                    }  
                });  
            }              


            $(document).ready(function(){
                test();  
            });  
        </script>        
    </body>
</html>




Код: php
1.
2.
3.
4.
5.
6.
7.
8.
//test.php
<?php
        for ($i = 0; $i < 10; $i++)
        {
            echo "I: $i - ";
            Sleep(1);
        }
?>



Я только начинаю осваивать эти языки программирования. Чисто теоретически понимаю, что строка $("#content").html(html); сработает тогда, когда полностью выполнится код из test.php. Но как сделать, чтобы долгий работающий цикл на PHP передавал html-странице определенные данные во время своей работы?
...
Рейтинг: 0 / 0
Вывод информации в цикле с обновлением страницы на PHP
    #38403762
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Random2Если нельзя сделать только на PHP, каким образом это можно сделать и на чем?Правильно думаете, получается нехилый симбиоз клиентских и серверных скриптов. Смысл такой: серверный скрипт по мере выполнения периодически отчитывается "выполнено столько-то процентов (или чего там еще)" и сохраняет сие значение где-то в БД (как один из вариантов, конечно), а клиентский скрипт периодически (раз в секунду-две-пять или вроде того) запрашивает это значение, получает ответ и выводит его в браузер. Разумеется, перезагрузка страницы каждую секунду - дело неблагодарное, а потому запрос должен быть асинхронным - вот так до ajax дошли. Есть и более хитрые способы.
...
Рейтинг: 0 / 0
Вывод информации в цикле с обновлением страницы на PHP
    #38403819
Random2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,

Получается должно быть что-то типа такого (вместо БД инфу можно хранить в файле?):
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
            function getProgress()
            {  
                $.ajax({                    
                    url: "getprogress.php",  
                    cache: false,  
                    success: function(html)
                    {  
                        $("#content").html(html);  
                    }  
                });  
            }              

            function processData()
            {  
                $.ajax({                    
                    url: "processdata.php",  
                    cache: false,  
                    success: function(html)
                    {  
                        $("#content").html(html);  
                    }  
                });  
            }              

            $(document).ready(function(){
                processData();  
                setInterval('getProgress()',1000); 
            }); 


Я правильно понял?

авторЕсть и более хитрые способы.
Какие, например?
...
Рейтинг: 0 / 0
Вывод информации в цикле с обновлением страницы на PHP
    #38403873
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Random2вместо БД инфу можно хранить в файле?Да можно, конечно, и в файле и в мемкеше - оно почти не имеет различий (разница только в обращениях к диску, да сохранности информации в случае перезагрузки сервера). Однако, в любом случае следует предусмотреть возможность двух и более клиентских запросов (сессии?) - чтобы они не мешали друг другу, ну и уборку мусора.

Random2Я правильно понял?Да, как один из вариантов. Возможно, более правильным будет генерить новый запрос к серверу не каждую секунду, а спустя секунду после получения ответа. Это немного снизит вероятность перегрузки сервера.


Random2авторЕсть и более хитрые способы.
Какие, например? тынц
...
Рейтинг: 0 / 0
Вывод информации в цикле с обновлением страницы на PHP
    #38403876
Random2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ссылки, очень нужная инфа. Но для первого раза попробую сделать тем способом, который начал, вроде бы кажется проще, чем COMET.

vkleгенерить новый запрос к серверу не каждую секунду, а спустя секунду после получения ответа. Это немного снизит вероятность перегрузки сервера.
Есть еще вопрос - а где я могу отслеживать получения ответа от сервера? Насколько я понимаю, здесь:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
            function processData()
            {  
                $.ajax({                    
                    url: "processdata.php",  
                    cache: false,  
                    success: function(html)
                    {  
                        $("#content").html(html);  
                    }  


я не могу этого сделать, т.к. success: function(html) наступает после завершения выполнения processdata.php.
...
Рейтинг: 0 / 0
Вывод информации в цикле с обновлением страницы на PHP
    #38403973
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Random2,

Ну да, именно там. Получили контент (или сообщение об ошибке), разместили его на страничке. Затем можно "взводить" таймер для следующего запроса.
...
Рейтинг: 0 / 0
Вывод информации в цикле с обновлением страницы на PHP
    #38404060
Random2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,

Я почему спрашиваю, т.к. на данный момент
Код: javascript
1.
2.
3.
4.
success: function(html)
{  
    $("#content").html(html);  
} 


Наступает в конце выполнения processdata.php.

А в processdata.php код к примеру такой:
Код: php
1.
2.
3.
4.
5.
6.
7.
<?php
        for ($i = 0; $i < 10; $i++)
        {
            echo "I: $i - ";
            Sleep(1);
        }
?>


Как мне в каждой итерации цикла в processdata.php возвращать success обратно в JS?
...
Рейтинг: 0 / 0
Вывод информации в цикле с обновлением страницы на PHP
    #38404115
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Random2Как мне в каждой итерации цикла в processdata.php возвращать success обратно в JS?Никак. Более того, там цикл не нужен. Взяли данные о текущем проценте выполнения из базы/мемкеша/прочего и отдали. Все. Через секунду от клиента придет новый запрос - отдадите новые данные.

По большому счету, этот скрипт вообще не нужен. Вы же озвучивали вариант сохранения процента выполнения в файле - вот и забирайте клиентом этот файл.

Если же хотите чтоб именно php-скрипт был инициатором обновления данных на клиенте - смотрите в сторону comet.
...
Рейтинг: 0 / 0
Вывод информации в цикле с обновлением страницы на PHP
    #38407440
Random2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,

Спасибо за советы. Всё получилось.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Вывод информации в цикле с обновлением страницы на PHP
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]