IIS 8.5不更新动态页面(缓存已关闭,responseBufferingLimit = 0)

时间:2017-02-14 15:18:21

标签: php caching iis iis-8 buffering

我在Windows Server 2012R2上安装了IIS 8.5 / PHP 5.4。

我有一个简单的PHP脚本,每秒都会不断更新文件test.shtm(它只是为文件写了一个递增的数字):

test_call.php:         $ pctrl_file =的fopen("作业/ test.grass-PROC"' W&#39);

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文件。我也尝试过选项&#34;阻止所有缓存&#34;。

在IIS处理程序列表中,我看到.shtm有一个处理程序,所以我认为.shtm内容不被认为是静态的

在IIS配置编辑器中,我已将.php和.shtm

的ResponseBufferLimit设置为0

我还尝试了另一个文件扩展名.aaa而不是.shtm,其中.aaa设置为IIS MimeType列表中的plain / text。 (它没有变化)。

我从客户端浏览器调用此PHP脚本。 我检查test.shtm文件如何通过jquery / ajax使用GET(或POST,它不做更改)进行更改,以供参考,请参阅我的消息下面的代码。

在另一个标签中,我输入此生成的test.shtm文件的URL。 我检查test.shtm文件是否真的使用RemoteDesktop更改,我确认服务器上的文件每秒都会更改。 但是,ajax输出和纯页面输出(在任何浏览器中按下F5到test.shtm的URL)在两次或三次迭代后停止更新。

有三个特点:

1)当PHP脚本完成时,ajax输出立即更新以显示&#34; 100&#34;正如预期的那样,如果我在test.shtm上按F5(在PHP脚本完成之后),它会显示&#34; 100&#34;如预期的那样。

2)正是在我使用RemoteDesktop在记事本中打开test.shtm文件时,ajax输出更新为当前值,浏览器中的F5更新内容正确(但只有一次,直到我打开test.shtm服务器再一次)

3)问题2有时是真实但不总是

为了防止在浏览器中缓存,我尝试添加这些HTTP响应头是IIS配置: 缓存控制:无存储,必须重新验证 到期:0 它什么都没改变。

关于进行此测试的目的,我无法在生成的文件中添加任何其他内容,它应该只包含一个数字。

完全相同的脚本在我的本地计算机上的Windows 7 + Apache 2.2(具有默认缓存和缓冲设置)下运行良好。 我在IIS配置(或其他任何地方)做错了什么?

ajax checker(我也尝试显式调用test_call.php =&gt;无变化):

    <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>

0 个答案:

没有答案