0

ファイルから読み取ったデータを chrome クライアントにストリーミングしようとしています。データを正常にストリーミングできますが、応答がキャッシュされているため、それを防止したいと考えています。この状況が発生するのは、フラット ファイルに互いに独立したデータ エントリが含まれており、それらを同様に扱いたいからです。たとえば、私のファイルには次のものが含まれています。

{idle_time:94125387364,system_time:98954710321,user_time:3683963615} {idle_time:94125387789,system_time:98954710456,user_time:3683963845} {idle_time:94125387876,system_time:98954710678,user_time:3683963986}

{idle_time:94125387876,system_time:98954710678,user_time:3683963986} (THIRD ENTRY) を xmlhttprequest.responsetext として取得する代わりに、

{idle_time:94125387364,system_time:98954710321,user_time:3683963615} <br/>
{idle_time:94125387789,system_time:98954710456,user_time:3683963845} <br/>
{idle_time:94125387876,system_time:98954710678,user_time:3683963986}

注 : ブレークライン タグと空白スペースについては心配していません。

私のPHPスクリプトはtest.phpのようになります

<?php
set_time_limit(0); 
$filename = 'D:\Smoke_Test\data.txt';

function flush2 (){
echo(str_repeat(' ',256));
// check that buffer is actually set before flushing
if (ob_get_length()){            
    @ob_flush();
    @flush();
    @ob_end_flush();
}    
@ob_start();
}

$file_last_modified_time = 0;

while(true) 
{
$modified_time = filemtime($filename);
$processor_info = "";
if ($file_last_modified_time < $modified_time)  
{
    header("Expires: Sun, 20 Jan 1985 00:00:00 GMT"); // date in the past
    header("Cache-Control: no-cache");
    header("Pragma: no-cache");
    $file_last_modified_time = $modified_time;
    $handle = fopen($filename,"r");
    $processor_info = fgets ($handle);
    fclose ($handle);
    @ob_clean();
    echo $processor_info."<br/>";
    //flush2();
}
flush2();
sleep(1);
clearstatcache(true, $filename);
}

?>

私のhtmlページは次のようになります:Home.htm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-     transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title></title>
<script type="text/javascript" language = "javascript">
function read_file ()
{
    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp.onreadystatechange=function()
      {
        if (xmlhttp.readyState==4 || xmlhttp.readyState==3 ) //&& xmlhttp.status==200)
        {
            handle_data (xmlhttp.responseText);
        }
      }
    xmlhttp.open("POST","test.php",true);
    xmlhttp.send();
}

function handle_data (input)
{
    document.getElementById("txtResponse").innerHTML=input;
}
</script>

</head>
<body>
<p>
<input type="button" id="dtnSendRequest" value="Send Request" onclick="read_file()"/>
</p>
<p>
response : <span id="txtResponse"></span>
<!-- <input type="text" id="txtResponse" width="500"/> -->
</p>
</body>
</html>
4

3 に答える 3

0

responseText で起こっていることを避けることはできません。HTTP ストリーミング (ローカルまたはキャッシュではない) の性質により、これが実現します。私の状況と解決策を述べた非常に良い記事を見つけました。

記事はhttp://ajaxpatterns.org/archive/HTTP_Streaming.phpです

次の段落には、私の状況とその解決策が含まれています。

このサービスは、特別なトークン「@END@」で区切られた各メッセージを出力します (XML タグは別の方法です)。次に、正規表現を実行して最新のメッセージを取得できます。メッセージが完全であることを確認するには、その後にそのトークンが続く必要があります。」

于 2012-04-16T04:48:47.853 に答える
0

これをphpファイルの先頭に追加してみてください

header("Expires: Sun, 20 Jan 1985 00:00:00 GMT"); // date in the past
header("Cache-Control: no-cache");
header("Pragma: no-cache"); 
于 2012-04-15T15:17:34.993 に答える
0

これを使用してキャッシュなしを強制します。

header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");

出力を送信する前に、必ずこれを呼び出してください。

于 2012-04-15T15:17:54.640 に答える