IIS 8.5 не обновляет динамическую страницу (кэширование отключено, а responseBufferingLimit = 0)

У меня есть IIS 8.5 / PHP 5.4 на Windows Server 2012R2.

У меня есть простой PHP-скрипт, который постоянно обновляет файл test.shtm каждую секунду (он просто записывает в файл увеличивающееся число счетчиков):

test_call.php:
$ Pctrl_file = Еореп ( «работа / test.grass-прок», ‘ш’);

for ($counter=1;$counter<=100;$counter++)
{if ((fseek($pctrl_file,0)==-1||!fwrite($pctrl_file,$counter))||!fflush($pctrl_file))
echo ('Could not write to file resource');
sleep(1); //delay 1 sec
}

if (!fclose($pctrl_file)) echo 'Failed to close the file';

Для кэширования в IIS установлено значение «Без кэширования» для файлов .shtm. Я также попробовал вариант «предотвратить все кеширование».

В списке обработчиков IIS я вижу, что есть обработчик для .shtm, поэтому я думаю, что содержимое .shtm не считается статическим

В редакторе конфигурации IIS я установил ResponseBufferLimit в 0 как для .php, так и для .shtm

Я также попробовал другое расширение файла .aaa вместо .shtm с .aaa, установленным в обычный / текст в списке IIS MimeType. (Это не изменилось).

Я вызываю этот PHP-скрипт из клиентского браузера.
Я проверяю, как файл test.shtm изменяется через jquery / ajax, используя GET (или POST, он не вносит изменений), для справки см. Код под моим сообщением.

В другой вкладке я ввожу URL для этого сгенерированного файла test.shtm.
Я проверяю, что файл test.shtm действительно изменяется с помощью RemoteDesktop, и подтверждаю, что файл на сервере меняется каждую секунду.
Однако и вывод ajax, и вывод чистой страницы (нажатие F5 на URL для test.shtm в любом браузере) прекращают обновление после двух или трех итераций.

Есть три особенности:

1) Когда PHP-скрипт завершает работу, вывод ajax немедленно обновляется, чтобы отобразить «100», как и ожидалось, и, если я нажму F5 на test.shtm (после завершения PHP-скрипта), он отобразит «100», как и ожидалось.

2) Точно в тот момент, когда я открываю файл test.shtm в Блокноте с помощью RemoteDesktop, вывод ajax обновляется до текущего значения, а F5 в браузере корректно обновляет содержимое (но только один раз, пока я не открою test.shtm на сервере еще раз )

3) проблема 2 верна иногда, но не всегда

Чтобы предотвратить кэширование в браузере, я попытался добавить эти HTTP-заголовки ответа в конфигурации IIS:
Cache-Control: не хранить, обязательно повторная проверка
Истекает: 0
Это ничего не изменило.

Что касается цели, для которой был сделан этот тест, я не могу добавить что-либо еще в сгенерированный файл, он должен содержать только число.

Точно такие же сценарии хорошо работают в Windows 7 + Apache 2.2 (с настройками кэширования и буферизации по умолчанию) на моем локальном компьютере.
Что я сделал неправильно в конфигурации IIS (или где-либо еще)?

Проверка ajax (я также попытался вызвать test_call.php явно => без изменений):

    <html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script src="../jquery_min.js"></script>
</head>
<body>

<div id="answer"></div>

<script type="text/javascript">
function read_pctl()
{$.ajax({type: "GET",
cache:false,
mimeType: "text/plain",
url: 'jobs/test.shtm', //also tried adding ?_='+Math.random(),
data: $(this).serialize(),
success: function(pctl_data) {$('#control').html('updated: '+pctl_data); },
error: function(obj,msg,err) {console.log('TEST pctl error, file "jobs/test.grass-proc" : '+msg+' - '+err);}
});
}

$('#answer').html("<div id='control' style='border:blue 1px solid'>Place for updated numbers</div>"); //display progress message

pctl_updater=setInterval(read_pctl,1000); //start updating control-container

$.ajax({type: "POST",
url: 'test_call.php',
data: $(this).serialize(),
success: function(data) {$('#answer').html("<span class='error'>Finished<br></span>"); }
error: function(obj,msg,err) {$('#answer').html("<span class='error'>TEST call error:<br></span>"+msg+' - '+err); }
});
</script>
</body>
</html>

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]