Server(PHP)->Client(JPEG)

anpv

Guest
Server(PHP)->Client(JPEG)

Привет!
Для периодического обновления (период ~0.5 сек) JPEG-а у клиента в браузере я использовал следующий РНР-скрипт:
<?php
while (true)
{
header("Content-type: image/gif");
readfile("file.jpg");
usleep(500);
}
?>
Но в браузере не происходит обновления JPEG-а при обновлении на сервере!
Подскажите пожалуйста в чем дело?
 

Andrey_P

Guest
тебе в сам html на клиенте надо вставить что-то типа этого

--------------------------------------------------
<BODY onload="Start()">
<SCRIPT language="JavaScript" type="text/javascript">
<!--
var t = 1 // interval in seconds
image = "image.php" //name of the image

function Start() {
tmp = new Date();
tmp = "?"+tmp.getTime()
document.images["imagerel"].src = image+tmp
setTimeout("Start()", t*100)
}
// -->
</SCRIPT>
<IMG src="image.php" name="imagerel">
</BODY>
-------------------------------------------------------
 

nagash

Guest
2 anpv

просто интересно что происходит в браузере?
ради любопытства!
 

Ворон

Guest
Andrey_P Прав... Но твоя идея более чем интересна!
Почему это чудо техники не работает
1. потому что header посылаеться только после вывода файла на экран.
2. потому что ты сводишь с ума сервер мильйонами запросов (выход:
header("Content-type: image/gif");
readfile("file.jpg");
flush();
$last=filemtime("file.jpg");
while (true)
{
if($last!==filemtime("file.jpg")){readfile("file.jpg");flush();}
usleep(500);
})
3. Так оно тоже не работает и почему то пересылает пользователю тонны информации... А почему?
 

Ворон

Guest
2RomikChef: за что... Почему нельзя выводить по изменению времени модификации файла файл еще раз? Не сочти за наглость но na_tanke я уже был и все равно неясно...
 

nagash

Guest
ну что за глупость?
1 - как интересно браузер будет интерпретировать то что ему шлют картинку которая состоит из нескольких картинок...
ну глупо же!

2 - хеадеры можно вывести только ДО того как хоть что-то будет выведено...
второй \ третий \ десятый раз их вывести нельзя...
 

anpv

Guest
2 Ворон
*3. Так оно тоже не работает и почему то пересылает *пользователю тонны информации... А почему?
Потому, что похоже сервер кэширует картинки.
По моему нужно добавить:
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Pragma: no-cache"); // HTTP/1.0
Статья по этому поводу по адресу:
http://phpclub.unet.ru/tutor/cache.htm
 

RomikChef

Guest
anpv
ясно. Теория тебе недоступна.
Почему ткак, как ты хочешь, невозможно - ты не понимаешь.
Хорошо.
Надеюсь. хотя бы практика тебе доступна.
Так вот.
мой юный друг.
Всегда делай только то, что ты сам видел в интернете.
ТОЛЬКО ТО, ЧТО ВИДЕЛ!
А такой бредятины ты видеть не мог.
Ты мог видеть только то, что тебе написал СРАЗУ Andrey_P!!!
сделай так и не морочь людям и себе голову.
и больше кничек читай.
 

anpv

Guest
2 RomikChef
На счет бредятины:
таким образом я пытаюсь разгрузить нагрузку на сеть, т.к. будет только односторонний обмен данными.
 

Andrey_P

Guest
to anpv:

ты себя слушаешь?
---quote--
односторонний обмен данными
--/quote--
 

anpv

Guest
Сделал скрипты как рекомендовал Andrey_P.
Только в РНР добавил строку:
header("Cache-Control: no-cache, must-revalidate");
Но не работает.
Загружается (и то не с первого раза) одна картинка, а дальше браузер пытается загрузить другую и зависает на этом (другие JPEG-и дальше не появляются).
Возможно это связано с тем, что в момент когда на сервер пишется JPEG происходит считывание у клиента и это ни к чему ни приводит.
JPEG-и на сервер я копирую и считываю с помощью JavaScript-а со скоростью 2 JPEG-а в секунду,.
Похоже надо делать какуюто синхронизацию ?
Подскажите пожалуйста в чем дело!
 

Andrey_P

Guest
если ты не заметил, там ошибочка, что бы было 2 раза в сек надо исправить строку на это:

setTimeout("Start()", t*500)
 
Сверху