Наблюдение за долго исполняющимся скриптом

Krisrobal

Новичок
Наблюдение за долго исполняющимся скриптом

Пусть есть некий скрипт на PHP который обрабатывает данные из разных источников. Так как ему прихожится ждать поступления этих данных, время его выполнения оказывается весьма большим. Как можно следить за его работой (к примеру, узнать на каком этапе он сейчас находится)?
 

avm

Новичок
ну так пусть он периодически пишет в какой-нибудь html файл свое состояние...
 

Krisrobal

Новичок
Так вот хостер не дает писать!!! >:-o или я чего-то не догоняю. Можно как-нать скрипт так сделать, чтобы он браузеру осылал HTML-код порциями, а не весь сразу, по завершению?
 

Bast_Bastard

Новичок
function flush_buffer() {
echo str_pad(' ',4096);echo '<br>';
flush();
}
Например:
$a = file_get_contents($url);
echo 'загрузка из '.$url . 'завершена';
flush_buffer();
$b = file_get_contents($url1);
echo 'загрузка из '.$url1 . 'завершена';
flush_buffer();
 

Vassiliy

Новичок
Можно использовать AJAX для PHP. Скрипт будет обробатываться на сервере без перезагрузки страницы и при этом сообщать состояние процесса.
 

Bermuda

Новичок
Vassiliy
Очень интересно. А можно пример того, как скрипт используя всемогущий AJAX, который Вы для себя открыли позавчера, "будет обробатываться на сервере без перезагрузки страницы и при этом сообщать состояние процесса". Видимо я что-то пропустил?
>> AJAX для PHP
Улыбнуло :)
 

MajestiC

Пых
Vassiliy Да похоже вы нашли статью которую сами не читали, или прочитали и плохо понимаете само устройство системы, хотя думаю считаете что вы знаете AJAX =)

XMLHttpRequest не сможет обратиться к уже запущеному скрипту, вместо этого он сможет обратиться к новой копии этого скрипта, которая будет всё выполнять заново. А скрипт как-то должен узнать что делает предыдущий (который долго работает). Лучше будет создать отдельный скрипт который будет выводить статус.

Krisrobal
В итоге имеем ситуацию, что, работающий скрипт куда-то должен записывать тек.ситуацию (в БД, файл, не важно). А уж как эти данные достать - тут уже решений много. Можете вызывать отдельный скрипт который будет считывать текущую ситуацию и выводить её вам (а вот тут уже можете AJAX использовать =).
Вариант с flush тоже можно использовать, но я бы предпочёл 1-ый вариант.
 

Bermuda

Новичок
Vassiliy, а почему вы отвечаете не на тот вопрос который Вам задали?
Для полной ясности могу повторить: объясните (приведите пример) как с помощью "AJAX для PHP" скрипт который "будет обробатываться на сервере" будет "сообщать состояние процесса"?

>> Описывать к сожалению сейчас нет времени
А нести бред значит время нашлось?
 

rsv

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

boombick

boombick.org
да нафиг где-то хранить состояние?
Используем xmlhttprequest и опрашиваем его состояние (параметр ReadyState).. если оно не равно Complete, значит скрипт еще выполняется
 

dantistus

Новичок
Автор оригинала: rsv
С помощью аякса обращаться к вспомогательному скрипту или к тому же самому за информацией, которая в сессии хранится.
А как это ты обратишься "к тому же самому"?

Автор оригинала: boombick
да нафиг где-то хранить состояние?
Используем xmlhttprequest и опрашиваем его состояние (параметр ReadyState).. если оно не равно Complete, значит скрипт еще выполняется
А вот это - просто таки шедевр ;)
 

dantistus

Новичок
Либо в твоей подписи написана правда, либо мы говорим о разных вещах.
 

rsv

Новичок
Один и тот же скрипт можно вызывать передавая ему переменную.
Так вот в зависимости от значений, передеваемой переменной, скрипт может либо делать основную свою работу, либо показывать информацию о выполняемом процессе.
 

bkonst

.. хочется странного?...
Можно текущее состояние скрипта хранить в сессионных переменных. С помощью аякса обращаться к вспомогательному скрипту или к тому же самому за информацией, которая в сессии хранится.
Если данные сессии хранятся в файлах (по умолчанию), PHP их блокирует. Второй скрипт сможет прочитать данные только после окончания работы первого - или после session_write_close.
 

Alexandre

PHPПенсионер
да нафиг где-то хранить состояние?
Используем xmlhttprequest и опрашиваем его состояние (параметр ReadyState).. если оно не равно Complete, значит скрипт еще выполняется
и по таймауту отваливается - о как!
 
Сверху