是否可以在连续的ajax请求中为php变量分配一次值?

时间:2012-01-30 20:30:22

标签: php ajax

我有一些简单的文本文件,我正在尝试使用php读取该文件内容并将其更新给用户。我每隔2秒设置一次ajax请求,但问题是文件不会每次都更新2秒可能是15或30或1分钟。所以我想这样做

检查文件的最后修改时间,如果不同,则只将其更新给用户,但在此处我被困在哪里。

 Javascript functions

 function read()
 {
    read_text();
    t=setTimeout("read()",200);
 }

 function read_text()
 {
     var xmlhttp;
     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.status==200)
       {
          document.getElementById('read').innerHTML = xmlhttp.responseText;
       } 
    }
    xmlhttp.open("GET","demo.php",true);
    xmlhttp.send();
 }

我的php文件

<?php 
    $a = fileattime("filenam");
    $b = fileattime("filenam");
    if($b > $a )
    {
     echo "update contents";
     $a = $ b;
    }

?>

我想将文件的最后修改时间存储在$a变量中,并将该值与$b变量进行比较,但此处$a将被每个ajax请求的新值覆盖。我希望$a仅为$b分配一次值,我的意思是第一个ajax请求,然后将其与$b值进行比较,如果$a大于$a则将内容更新为用户,然后使用$b

填写{{1}}

但这是我坚持的地方。非常感谢任何帮助。谢谢

2 个答案:

答案 0 :(得分:2)

尝试创建会话,并将信息存储在会话变量中。

http://us3.php.net/manual/en/reserved.variables.session.php

如果您这样做,您将拥有一个持久值,您可以使用该值来测试以查看上次修改/更新的值。

请务必在脚本的开头执行session_start()。

你可以看起来像这样...... JS:

// standard Ajax stuff
xmlhttp.open("GET", "demo.php?request=1", true);
xmlhttp.send();

PHP:

<?php
    session_start();
    if($_GET['request'] == 1) $_SESSION['modified_since'] = fileattime('filename');
    $a = $_SESSION['modified_since'];
    $b = fileattime("filename");
    if($b > $a) {
        echo "Update Contents";
        $_SESSION['modified_since'] = $b;
    }
?>

答案 1 :(得分:0)

应为每个用户分配唯一ID,最后一次应存储在数据库中。唯一ID可能是在第一次请求后的cookie中,然后用于在数据库中查找信息。