使用Ajax每X秒运行一个php脚本


Using Ajax to run a php script every X seconds

我的项目:

我正在尝试创建一个专属门户来共享互联网连接,但客户端必须首先同意用户协议。之后,如果他停留在门户页面,他就可以连接互联网。

问题:

我的问题是检查客户是否仍在我的页面上向他提供连接。

为此,我尝试每10秒在我的iptables中添加他的MAC地址作为异常,因为我每15秒刷新一次所有MAC异常(除非@MAC超过两次,我让一次)。

我的文件夹包含:

index.php(显示所有内容的主页)和mac.php(我在其中添加了@mac的异常)

我的mac.php:

<?php
$ipAddress=$_SERVER['REMOTE_ADDR'];
$macAddr=false;
$arp=`arp -a $ipAddress`;
$lines=explode(" ", $arp);
$macAddr=$lines[3];
echo exec("sudo /sbin/iptables -t nat -I PREROUTING -m mac --mac-source $macAddr -j ACCEPT");
echo exec("sudo /sbin/iptables -I FORWARD -m mac --mac-source $macAddr -j ACCEPT");
?>

我已经在我的index.php中尝试过了:

<script>
setInterval(
(function () {
    $("#mac").load("mac.php");
}), 10000);
</script>
<div id="mac"></div>

这个:

    <script>
    setInterval(
    (function () {
        $("#mac").load("mac.php #mac");
    }), 10000);
    </script>
 <div id="mac">
 <?php
    $ipAddress=$_SERVER['REMOTE_ADDR'];
    $macAddr=false;
    $arp=`arp -a $ipAddress`;
    $lines=explode(" ", $arp);
    $macAddr=$lines[3];
    echo exec("sudo /sbin/iptables -t nat -I PREROUTING -m mac --mac-source $macAddr -j ACCEPT");
    echo exec("sudo /sbin/iptables -I FORWARD -m mac --mac-source $macAddr -j ACCEPT");
    ?>
</div>

我已经尝试过其他选择,比如:

  • 将mac.php的最后两行放在用参数($macAddr)调用的mac.php中,并用参数调用mac.php

从现在起,唯一有效的方法是每10秒刷新一次页面。但正如你所知,这不是最好的方式。。。

我在Linux系统上工作。

感谢您的帮助

而true将执行无穷大
mac.php:

    <?php
    function checkMac(){
            $ipAddress=$_SERVER['REMOTE_ADDR'];
            $macAddr=false;
            $arp=`arp -a $ipAddress`;
            $lines=explode(" ", $arp);
            $macAddr=$lines[3];
            echo exec("sudo /sbin/iptables -t nat -I PREROUTING -m mac --mac-source $macAddr -j ACCEPT");
            echo exec("sudo /sbin/iptables -I FORWARD -m mac --mac-source $macAddr -j ACCEPT");

          }
     ?>

您需要调用此页面的所有其他页面。如前

abc.php

<?php
require_once('mac.php');
  while(true){
     checkMac();
     sleep(10); // this should halt for 10 seconds for every loop
  } 

?>

希望这对你有用。

我用解决了这个问题

<script language="JavaScript">
    function mac() {
        var xmlhttp = new XMLHttpRequest();
        xmlhttp.onreadystatechange = function() {
            xmlhttp.responseText;
        };
        xmlhttp.open("GET", "mac.php", true);
        xmlhttp.send();
    }
    mac();
    setInterval(mac, 10000);
</script>