MKardash
Guest
Постоянная связь бровзера с РНР скриптом
Есть одна хитрая задачка.
Её суть во в чём:
------------------------------------------------------
\шаг 1\ Бровзер открывает соединение с сервером
\шаг 2\ Сервер он же некий РНР скрипт отдаёт ответ бровзеру, но не отключаэтся (ждёт какого нибудь изменения - файл создался, или в базу чтото дописали)
\шаг 3\ Если сервер дождался изменения то сразу же говорит серверу рефрешнуть страницу
\шаг 4\ Соответственно бровзер делает рефреш
------------------------------------------------------
Меня интересуют все возможные варианты решения такой задачки.
Один из вариантов я уже нашол, но он не очень красивый, в РНР скрипте таймера (загружается в iframe главной страницы)
ставится неограниченый таймаут - set_time_limit (0); и при определённом событии таймер закрывается и даёт команду посредством Java Script перегрузить главное окно. Исходники смотрите ниже.
============================
скрипт таймера: timer.php
============================
скрипт емуляции события: file.php
============================
скрипт главной странички: index.php
============================
Есть одна хитрая задачка.
Её суть во в чём:
------------------------------------------------------
\шаг 1\ Бровзер открывает соединение с сервером
\шаг 2\ Сервер он же некий РНР скрипт отдаёт ответ бровзеру, но не отключаэтся (ждёт какого нибудь изменения - файл создался, или в базу чтото дописали)
\шаг 3\ Если сервер дождался изменения то сразу же говорит серверу рефрешнуть страницу
\шаг 4\ Соответственно бровзер делает рефреш
------------------------------------------------------
Меня интересуют все возможные варианты решения такой задачки.
Один из вариантов я уже нашол, но он не очень красивый, в РНР скрипте таймера (загружается в iframe главной страницы)
ставится неограниченый таймаут - set_time_limit (0); и при определённом событии таймер закрывается и даёт команду посредством Java Script перегрузить главное окно. Исходники смотрите ниже.
============================
скрипт таймера: timer.php
PHP:
<?php
error_reporting (E_ALL);
set_time_limit (0);
ob_implicit_flush ();
$start_time = time();
$end_time = $start_time + (100);
$curr_time = $start_time;
$period = 1;
$in_period = 0;
while (1) {
if($prew_now != $now) {
$in_period++;
if($in_period >= $period) {
if(is_file("./some.txt")) {
echo ' <script language="JavaScript">
<!--
parent.location.reload();
//-->
</script>';
exit;
}
$in_period = 0;
}
$prew_now = $now;
}
}
?>
скрипт емуляции события: file.php
PHP:
<?php
if(!is_file("./some.txt")) {
$handle = fopen("./some.txt", "w");
fclose($handle);
} else {
unlink("./some.txt");
}
echo 'Is file '.is_file("./some.txt");
?>
скрипт главной странички: index.php
PHP:
<?php
session_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
</head>
<body>
<IFRAME src="timer.php" width="0" height="0"
scrolling="auto" frameborder="0">
</IFRAME>
<?php
if(!isset($_SESSION['what_is'])) {
$_SESSION['what_is'] = 0;
echo 'I can not found any vars!<br>';
} else {
$_SESSION['what_is']++;
echo 'I found var "what_is" - '.$_SESSION['what_is'].'!';
}
echo '<hr>Is file '.is_file("./some.txt");
?>
</body>
</html>