b.html(setTimeout()向server.php请求)监听txt.txt文件的上次修改时间,如果判断出文件被修改过,则返回给b.htmla.html只是个发送字符串的代码,它会影响txt.txt的上次修改时间(因为字符串是存到txt.txt文件里的)*问题是:为什么一直执行while里的if呢?
//server.php
<?php
if(isset($_POST['text'])){
file_put_contents('txt.txt', $_POST['text']."\r\n");
echo '1';
exit;
}$filemtime = isset($_POST['filemtime']) && $_POST['filemtime']? $_POST['filemtime']: filemtime('txt.txt');while(1){
if($filemtime == filemtime('txt.txt')){
sleep(1);//这里的问题,高手请来看看
}else{
echo filemtime('txt.txt');
exit;
}
}
?>
//a.html
<input type="text" id="text" value="text">
<input type="button" value="发送" onclick="send()"><script src="../jquery.js"></script>
<script>
function send(){
var text = document.getElementById("text").value; $.post("server.php", {"text": text, "rand": Math.random()}, function(data){
if(data == "1"){
alert("发送成功!");
}
});
}
</script>//b.html
<div id="div"></div><script src="../jquery.js"></script>
<script>
var filemtime = 0;
function test(){
$.post("server.php", {"filemtime": filemtime, "rand": Math.random()}, function(data){
if(data){
filemtime = data;
document.getElementById("div").innerHTML = data;
setTimeout("test()", 1000);
}else{
alert("error");
}
});
}test();
</script>
//server.php
<?php
if(isset($_POST['text'])){
file_put_contents('txt.txt', $_POST['text']."\r\n");
echo '1';
exit;
}$filemtime = isset($_POST['filemtime']) && $_POST['filemtime']? $_POST['filemtime']: filemtime('txt.txt');while(1){
if($filemtime == filemtime('txt.txt')){
sleep(1);//这里的问题,高手请来看看
}else{
echo filemtime('txt.txt');
exit;
}
}
?>
//a.html
<input type="text" id="text" value="text">
<input type="button" value="发送" onclick="send()"><script src="../jquery.js"></script>
<script>
function send(){
var text = document.getElementById("text").value; $.post("server.php", {"text": text, "rand": Math.random()}, function(data){
if(data == "1"){
alert("发送成功!");
}
});
}
</script>//b.html
<div id="div"></div><script src="../jquery.js"></script>
<script>
var filemtime = 0;
function test(){
$.post("server.php", {"filemtime": filemtime, "rand": Math.random()}, function(data){
if(data){
filemtime = data;
document.getElementById("div").innerHTML = data;
setTimeout("test()", 1000);
}else{
alert("error");
}
});
}test();
</script>
sleep(1)是为了让cpu喘口气,1秒钟后继续监听文件是否被修改。如果被修改,又把修改时间输出,传回给客户端,客户端再把这个时间发送到服务器端,如果有另外一个请求修改了文件,就会把最新的文件修改时间传回给客户端,如此反复最好sleep(1)之后加上clearstatcache()清楚文件缓存。