Скрипт работает - Броузер "отдыхает"

insidex

флихтэръер
Скрипт работает - Браузер "отдыхает"

Так не хотелось новую тему создавать,тем более в силу пуститячности вопроса...эх

Все же...

Я хочу сделать финчу,чтобы пользователю скрипта не пришлось ждать целиком загрузки браузера,пока скрипт свои математические операции произведет и выдаст их в итоге на экран.
В место этого я вызываю ignore_user_abort (1) , а дальше... перед тем как передать управление скрипту,пытаюсь в принудительной форме сообщить броузеру,что страница загрузилась,то есть посылаю ему хидер("connection: close\r\n").По логике в силу ignore_user_abort скрипт продолжит свою работу,токо результат в лог файл запишет...
Однако на практике у меня броузер отказывается реагировать на команды хидера...Вот собственно все.Помогите хто чем,может.Хоть манами,тоже рад буду.

-~{}~ 10.02.06 23:42:

Если кто не понял моего объяснения,вот попутный пример:
PHP:
  ignore_user_abort (1);  
  //echo("Succed!");
  header("connection: close\r\n");
  header("\r\n");
  for($i=0;$i < 10000000;$i++)
  {
   // что угодно много раз//   
  }
 

insidex

флихтэръер
К сожалению,не помагает.Вывод длины заголовка только лишь обрезает контент. Посылка заголовка сonnection: close не заставляет браузер разорвать соединение со скриптом. HE-L-Ps!!!!!!!
 

white phoenix

Новичок
Баян... заголовок HTTP-ответа 'Connection' может быть:
'close' - соеденение закрывается после получения ответа
'keep-alive' - сервер может принять еще один запрос через тот же сокет.
Никакого отношения к делу это не имеет. 'Content-length' очевидно тоже не поможет.
Способов думаю тут несколько, но я решил такую задачку выполняя в конце скрипта:
PHP:
system('/path/to/php -q script.php > /dev/null &');
 

insidex

флихтэръер
Благодарю white phoenix Твой способ самый красивый.
Хотя лазил по форуму и еще нашел,самый примитивный http://phpclub.ru/talk/showthread.php?threadid=57692&goto=nextnewest

-~{}~ 11.02.06 16:17:

Еще раз благодарю :)

Где можно про ключи почитать ( в команде system),а то может я не совсем то,что мне нужно использую.
 

Andreika

"PHP for nubies" reader
insidex
ключи к php? /path/to/php -h
> перенаправляет вывод в файл (устройство) - тут в пустоту
& - не ожидаем окончания выполнения
 

insidex

флихтэръер
Спасибо большое,очень рад тому ,что здесь никогда не бросят в беде ;)
 

diamond_krnl

pure-php
white phoenix
просто тест:
PHP:
function fn()
{
  flush(); 
  sleep(10);
  // что угодно много раз    
}
register_shutdown_function('fn');
echo 'hello world';
а теперь так:
PHP:
function fn()
{
  sleep(10);
  // что угодно много раз    
}
register_shutdown_function('fn');
echo 'hello world';
но, канечно требует иногда max_execution_time=0
 

insidex

флихтэръер
Я то же не совсем понял зачем мне использовать эту мудренную функцию.Мне нужно было всего лишь разделить процессы: на математические,которые пользователя касаться не должны ,ну и на все остальное,в основном вывод результатов этих матопераций.
 

diamond_krnl

pure-php
rtfm:
"The registered shutdown functions are called after the request has been completed (including sending any output buffers)"

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

если не ошибаюсь сборка мусора и запись в сессиях работает через register_shutdown_function()
 

insidex

флихтэръер
Можно последний вопрос по этой теме,плз...

Через команду
PHP:
system('/path/to/php -q script.php > /dev/null &');
можно ли передавать параметры к script.php(QUERY_STRING) ,или же надо как-то выкручиваться,типа использовать,например,временные файлы для передачи значений переменных и т.д. ?
 

insidex

флихтэръер
OK
-------------------------------------------

Глубоко извиняюсь,что поспешно создал тему на аналогичный вопрос,так что лучше отпишусь здесь...

Такс..Все таки тема не осталась без вопросов(
А именно запуск фонового процесса удалось осуществить только с помощью функции system() . Однако это совсем не то,что мне надо.Ведь при ее вызове главный скрипт будет ждать окончания работы нового процесса,а нужно чтобы этот процесс никак не влиял на главный скрипт,просто надо запустить и только запустить из главного скрипта этот скрипт.
Вызов этого(любезно предоставленное SIMM):
PHP:
<?php
function execInBackground($path, $exe, $args = "") { // jonas DOT info AT gmx DOT net 12-Sep-2003 12:24
   if (file_exists($path . $exe)) {
       chdir($path);
       if (substr(php_uname(), 0, 7) == "Windows")
           pclose(popen("start \"bla\" \"" . $exe . "\" " . escapeshellarg($args), "r"));    
       else
           exec("./" . $exe . " " . escapeshellarg($args) . " > /dev/null &");    
   }
}
?>
запускает мне ПРОГРАММУ - отладчик,а не отдельный процесс.

Знаю что выход есть,ибо сам много раз видел подобные скрипты ,поэтому и не даю теме умереть...
 

insidex

флихтэръер
При чем тут фоновый процесс и вывод в отдельный поток?

Хоть намекните в каком направлении думать? Форки? exec?

Если нет,то как можно браузер самостоятельно оторвать от скрипта,
типа,чтобы он закрыл соединение?

Если нет,то подскажите хоть по какому признаку инфу на эту тему через гугл искать?
 

SiMM

Новичок
> типа,чтобы он закрыл соединение?
Спрашивать надо то, что нужно. А не что попало.
[m]exec#58557[/m]
 
Сверху