Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过AJAX监控文件更改?_Ajax_File_Real Time - Fatal编程技术网

如何通过AJAX监控文件更改?

如何通过AJAX监控文件更改?,ajax,file,real-time,Ajax,File,Real Time,我正在寻找一种通过AJAX(而不是通过JS框架!)实时监控文件更改的方法。如果对该文件进行了更改,我需要它发出警报消息。我是个彻头彻尾的阿贾克斯傻瓜,所以请温柔点。;-) 编辑:让我更详细地解释一下目的。我正在使用一个用PHP为webhop编写的聊天脚本,我想要的是从一个管理模块监视聊天请求。聊天记录存储在文本文件中,如果有人启动聊天会话,则会创建一个新文件。如果是这样的话,在管理模块中,我希望实时看到它 有道理吗 AJAX只是一个javascript,因此从它的定义来看,除非其他服务调用js/

我正在寻找一种通过AJAX(而不是通过JS框架!)实时监控文件更改的方法。如果对该文件进行了更改,我需要它发出警报消息。我是个彻头彻尾的阿贾克斯傻瓜,所以请温柔点。;-)

编辑:让我更详细地解释一下目的。我正在使用一个用PHP为webhop编写的聊天脚本,我想要的是从一个管理模块监视聊天请求。聊天记录存储在文本文件中,如果有人启动聊天会话,则会创建一个新文件。如果是这样的话,在管理模块中,我希望实时看到它


有道理吗

AJAX只是一个javascript,因此从它的定义来看,除非其他服务调用js/AJAX来通知更改,否则您没有任何工具来访问文件。

要使用AJAX监控文件的更改,您可以执行以下操作

var previous = "";

setInterval(function() {
    var ajax = new XMLHttpRequest();
    ajax.onreadystatechange = function() {
        if (ajax.readyState == 4) {
            if (ajax.responseText != previous) {
                alert("file changed!");
                previous = ajax.responseText;
            }
        }
    };
    ajax.open("POST", "foo.txt", true); //Use POST to avoid caching
    ajax.send();
}, 1000);

我刚刚对它进行了测试,它运行得很好,但我仍然坚持认为AJAX不是解决问题的方法。比较大文件的文件内容会很慢。另外,您没有提到任何框架,但是您应该为AJAX使用一个框架,只是为了处理跨浏览器的不一致性。

我最近从头开始做了这件事

我不知道你对PHP(这是我所知道的唯一一种服务器脚本语言)有多满意,但我会尽量简短,如果有任何疑问,请随时提问

我使用的是长轮询,这包括(

  • 创建一个PHP脚本,定期检查文件内容,只有在看到任何更改时才会响应(可以在响应中包含更改的描述)
  • 创建XHR对象
  • 将通知代码包含为回调函数(它可以使用说明)
  • 提出请求
  • PHP脚本将开始检查文件,但在发生更改之前不会回复
  • 当它响应时,将调用回调并启动通知代码
  • 如果您不关心文件的内容,只关心它已被更改,那么可以检查上次修改的时间,而不是PHP脚本中的内容


    编辑:从一些评论中,我看到有一个名为FAM的东西可以监控文件更改,这似乎是PHP脚本的一种方式

    您的设置是什么?文件在服务器上,您想监控来自网络上其他地方的客户端的更改,还是其他什么?本例中的设置是localhost,脚本必须监控文件在脚本所在的同一台服务器上可以通过HTTP访问。顺便说一下,这是一个文本文件。我在Mac OS X 10.7服务器上使用Apache 2和PHP。我无法安装FAM,但感谢您的提示,它可能对其他人有用!使用
    sha1_文件
    ()若要计算文件的哈希值,请将其存储在某个位置,然后将上一个哈希值与当前哈希值进行比较,以查看是否有任何更改。这仍然无法解决实时监控问题(有关详细信息,请参阅原始帖子中的“我的编辑”)。这不是通过在后台运行PHP脚本来完成的,而是通过客户端脚本来完成的。我知道这可以通过AJAX以某种方式完成。我以前见过它。您可以通过AJAX随时检查某个文件中的更改,但不检查创建的新文件,除非您已经知道它的名称。您可以随时使用另一个文件来检查使用“conversations.json”之类的静态文件,并让它列出所有当前对话。我可以做的是将新的聊天请求推送到一个文件中,在该文件中存储新创建文件的路径。我可以用PHP读取这些文件并向管理仪表板发送通知。现在如何操作(使用示例代码将不胜感激!)我是否使用自动刷新的AJAX监控单个文件?