mav-im
Новичок
Зависание винды при использовании динамической смены рисунка JS + PHP
Итак, есть задача: обновление картинки на страничке без обновления самой странички.
Решается довольно просто - совместное использование PHP и JavaScript.
Для отладки создал два файла: "dynamicImage.php" и "getImg.php".
Первый файл делает саму страничку. Листинг следующий:
На страничке после загрузки имеется рисунок с текущим временем на нем и две кнопки
("Запуск часиков" и "Остановка"). После нажатия кнопки запуска время на рисунке
изменяется с интервалом 1 сек. (устанавливается в функции setTimeout).
Второй файл "getImg.php" генерит рисунок, который с помощью функции JSClock (из
первого файла) заменяет имеющийся рисунок в браузере.
На всякий случай приведу и его листинг:
Так вот, данные файлы работают как надо, но есть одно НО.
Через определенное кол-во минут (при текущем интервале вызова функции JSClock) браузер
IE виснет и весь виндоус также. При этом диспетчер задач показывает полную загрузку
проца 100% и 99% из них приходится на процесс Apache.exe.
При итервале замены рисунка 1 сек. - зависание происходит примерно через 20 минут
работы часиков.
Для ускорения процесса зависания можно интевал уменьшить до 100 мс, тогда где-то через
1 минуту все висит.
Анализируя приведенный код, я не могу найти ошибку. Так что у меня вопрос ко всем кодерам - В чем может быть дело?
Apache/2.0.53 и PHP/5.0.4. Настройки менял только в файле httpd.conf: заремовал
строчку AddDefaultCharset ISO-8859-1, чтоб нормально чарсет менять.
Итак, есть задача: обновление картинки на страничке без обновления самой странички.
Решается довольно просто - совместное использование PHP и JavaScript.
Для отладки создал два файла: "dynamicImage.php" и "getImg.php".
Первый файл делает саму страничку. Листинг следующий:
PHP:
<html>
<head>
<meta http-equiv="Content-Type" content = "text/html charset=windows-1251">
<title>Часики тик-так</title>
<script language="JavaScript" type="text/javascript">
var enable_upd = true; //Контроль запуска/остановки
var timerID = Null; //Номер таймера
function JSClock()
{
if (enable_upd)
{
var img_name = new Date(); //берем текущую дату и время
img_name = img_name.getTime(); //преобразуем в формат миллисекунд
document.clockForm.myIMG.src = "getImg.php?"+img_name; //смена рисунка
timerID = setTimeout("JSClock()", 1000); //установка таймера
}
}
</script>
</head>
<body>
<form name="clockForm">
<h2>Пример динамической замены рисунка без обновления страницы</h2>
Отображаем дату и время загрузки страницы<br>
(проверка того, что страница при смене рисунка не перезагружается заново):
<br><br>
<?php
echo date("H:i:s d M Y");
?>
<br><br>
<IMG ID=myIMG src="getImg.php">
<br>
<input type="button" value="Запуск часиков"
onclick="enable_upd = true; JSClock();">
<input type="button" value="Остановка"
onclick="enable_upd = false;">
</form>
</body>
</html>
("Запуск часиков" и "Остановка"). После нажатия кнопки запуска время на рисунке
изменяется с интервалом 1 сек. (устанавливается в функции setTimeout).
Второй файл "getImg.php" генерит рисунок, который с помощью функции JSClock (из
первого файла) заменяет имеющийся рисунок в браузере.
На всякий случай приведу и его листинг:
PHP:
<?php
/*Данный файл генерит рисунок*/
$img_height = 100; //Высота
$img_width = 265; //Ширина
$f_font = "ARIAL.ttf"; //Шрифт True Type
$f_size = 28; //Размер Шрифта True Type для названия
//Создаем переменную картинки
$im = imageCreate($img_width, $img_height);
$background_color = imageColorAllocate($im, 230, 230, 230);
$blue = imageColorAllocate($im, 0, 0, 255);
// Рамка
imageRectangle($im, 0,0,$img_width-1, $img_height-1, $blue);
imageRectangle($im, 10,10,$img_width-11, $img_height-11, $blue);
$s = iconv("windows-1251","UTF-8",date("H:i:s")); //Время
$px = ($img_width - (strlen($s)*$f_size/1.5))/2;
$py = ($img_height + $f_size)/2;
imageTTFtext($im, $f_size, 0, $px, $py, $blue, $f_font, $s);
header("Cache-Control: no-cache"); //без кэша
Header("Content-type: image/png"); //тип файла
imagePng($im); //Выводим
imageDestroy($im); //Разрушение переменной
?>
Через определенное кол-во минут (при текущем интервале вызова функции JSClock) браузер
IE виснет и весь виндоус также. При этом диспетчер задач показывает полную загрузку
проца 100% и 99% из них приходится на процесс Apache.exe.
При итервале замены рисунка 1 сек. - зависание происходит примерно через 20 минут
работы часиков.
Для ускорения процесса зависания можно интевал уменьшить до 100 мс, тогда где-то через
1 минуту все висит.
Анализируя приведенный код, я не могу найти ошибку. Так что у меня вопрос ко всем кодерам - В чем может быть дело?

Apache/2.0.53 и PHP/5.0.4. Настройки менял только в файле httpd.conf: заремовал
строчку AddDefaultCharset ISO-8859-1, чтоб нормально чарсет менять.