Connection handling

Ell

Guest
Connection handling

Что хочу спросить..

Можно ли и если можно то как?

Сообщить клиенту (браузер/флэшка) что скрипт закончил работу, чтоб клиент успокоился и забыл, а скрипт продолжал работать?

ну как сделать чтоб скрипт продолжал работать все знают

а вот как именно клиента отсоединить?
выдать ему табличку мол "все ОК скрипт успешно выполнен"
 

Linker

Guest
$output = "Поздравляем у Вас всё получилось, деньги Вам отправлены на указаный счёт, ждите !";

$length = strlen($output);

ignore_user_abort(1);
Header("Content-Length: ".$length);


По идее, броузер должен "отвалиться" получив указанное в заголовке количество байт.
 

Ell

Guest
Первый предложенный способ не работает
второй...еще не пробовал
но пишут что

Note that register_shutdown_function() does not work under Apache on Windows platforms. Your shutdown function will be called, but the connection will not close until the processing is complete. Zend tells me that this is due to a difference between Apache for *nix and Apache for Windows.

а надо под Windows
 

Ell

Guest
виндовз не видовз... это к делу не относится...

Браузер же пассивный! Значит ему можно послать сообщение о том что сайт загружен не так ли?
по протоколу http..

вот меня интересует как..
 

Linker

Guest
Автор оригинала: Ell
виндовз не видовз... это к делу не относится...
Браузер же пассивный! Значит ему можно послать сообщение о том что сайт загружен не так ли?
по протоколу http..
вот меня интересует как..
Я так пробовал:

<?
ignore_user_abort(1);
$t1 = microtime();

$out = str_repeat(" ", 300)."<br><br><h1 align=center>примите наши поздравления !!!</h1>";
$length = strlen($out);

header("Content-Length: ".$length);

echo $out;
flush();
sleep(5);

$f = fopen("file.txt", "a+");
fputs($f, $t1." - ".microtime());
fclose($f);
?>

У меня WinXP, Apache 1.3.27, PHP 4.3.0 (модуль)
не работает :(

Зато под *nix это работает без проблем.

Говорят нужен Apache 2.

А всё дело в буферизации, т.е. "все кому не лень" (и сервер и броузер) буферизуют вывод.

Если ничего не выйдет, вариант запускать второй скрипт через exec();
а в этом писать что нужно и exit;
 

Ell

Guest
т.е. всякие там echo пишут в буфер?..
наверное..
 

Linker

Guest
Я точно не уверен, врать не буду, но похоже всё дело в том как работает flush()
под *nix - великолепно, т.е. буфер всегда сбрасывается, а под win по-разному, но как правило не работает.

Кстати, на эту тему есть много примеров, посмотрите комментарии к этой функции на www.php.net, там много решений для работы под win, например для броузера рекомендуется выводить дополнительное количество байт и.т.д.

Конфигурация у Вас какая? Сервер, ОС ? Может там есть для Вас пример посмотрите.
 

nagash

Guest
а вот например ИЕ буферизует 450 байт и только после этого выводит текст
 

Linker

Guest
Автор оригинала: nagash
а вот например ИЕ буферизует 450 байт и только после этого выводит текст
Даже если сделать так:

$out = str_repeat(" ", 999)."<br><br><h1 align=center>примите наши поздравления !!!</h1>";

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

В любом случае возможные решения могут быть здесь: [m]flush[/m]
 
Сверху