变量更改时运行PHP

时间:2015-03-24 10:19:52

标签: javascript php jquery mysqli

我的php代码有问题。当变量发生变化时,我想在我的数据库中添加一些内容。我从另一个更改的文件中获取变量。

您可以在下面找到代码:

$urlMachineON = 'http://192.168.0.150/awp/Shredder/PLCfiles/IOmachineActive.html';

// get content
$contentMachineON = file_get_contents($urlMachineON);

//remove first 2 characters
$truncate = substr($contentMachineON, 2);

//remove last 5 characters
$MachineOn = substr($truncate, 0, -5);

if ($MachineOn == 0)
{
    echo "de machine staat uit";
    //Send information to the database
    //example: current time + MachineStatus(off) + message(Machine offline Error X)
}
elseif($MachineOn == 1)
{
    echo "de machine staat aan";
    //Send information to the database
    //example: current time + MachineStatus(on) + message(Error X is solved)
}

当我这样做时,它只会在刷新我的网页或使用某种按钮时在我的数据库中设置信息。但有点必须自动化。因此,当变量$MachineOn从0变为1或1变为0时,它必须在我的数据库中添加信息。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

如果在同一次执行期间发生变化,您可以使用

static $previousMachineOn=$MachineOn;
if($previousMachineOn!=$MachineOn){
//changed
$previousMachineOn=$MachineOn;
//handle the change
}

如果在同一会话期间更改,则可以使用

$_SESSION['previousMachineOn']=(array_key_exists('previousMachineOn',$_SESSION)?$_SESSION['previousMachineOn']:$MachineOn);
if($_SESSION['previousMachineOn']!=$MachineOn){
//changed
$_SESSION['previousMachineOn']=$MachineOn
//handle the change
}

如果在执行期间或会话期间既没有改变,也

if(file_get_contents("previousMachineOn.txt")!=$MachineOn)
{
//changed
file_put_contents("previousMachineOn.txt",$MachineOn,LOCK_EX);
//handle the change
}

或者您可以使用数据库或简单的文本文件,告知最新更新时间,并在很久以前重新更新

if(file_get_contents("lastupdatetime.txt")-time()>1*60*60)
{
//more than 1 hour since last update.
//update lastupdatetime
file_put_contents("lastupdatetime.txt",time(),LOCK_EX);
//update code goes here
}

或者你可能有一个本地缓存副本和一个cronjob来定期更新它...在这种情况下,你可能想要一些方法来处理cronjob的竞争条件删除文件以便及时更换它与更新版本(文件_put_contents与LOCK_EX应该做的,我相信,但请注意,根据我的经验,LOCK_EX在Windows * XP / 7操作系统上是狡猾/无功能)