如何在PHP中使用setInterval?

时间:2012-10-08 14:25:04

标签: php

我想问一下,如何在一段时间后一次又一次地使用php函数,就像Javascript中的setInterval一样。我们设定时间,直到脚本中止或关闭为止。

的index.php

<?
$Wall = new Wall_Updates();
$updatesarray=$Wall->Updates();
foreach($updatesarray as $data)
{
    $likes=$data['likes'];
    ?>
    <div id="likes"><?php echo $likes; ?></div>
    <?
}
?>

Wall_Updates()函数在 FUNCTION.PHP

中定义
<?php

class Wall_Updates {    
    public function Updates() {
        $myname=$_COOKIE['usename'];
        $query=mysql_query("SELECT * FROM posts WHERE name='$myname'");
        while($row=mysql_fetch_array($query))
            $data[]=$row;
        return $data;
    }
}
?>

我希望这个Wall_Updates()函数一次又一次地从mysql中获取数据。所以,它会被更新。

8 个答案:

答案 0 :(得分:22)

记录:我认为这是个坏主意。但无论如何:))

试试此代码

function setInterval($f, $milliseconds)
{
    $seconds=(int)$milliseconds/1000;
    while(true)
    {
        $f();
        sleep($seconds);
    }
}

用法:

setInterval(function(){
    echo "hi!\n";
}, 1000);

或者:

$a=1; 
$b=2;

setInterval(function() use($a, $b) {
    echo 'a='.$a.'; $b='.$b."\n";
}, 1000);

答案 1 :(得分:6)

我建议使用setInterval使用AJAx从.php页面轮询结果,然后输出结果。

所以使用jQuery会看起来像这样:

<script>
    var poll = true;
    var getData = function() {
        if (poll) {
            $.get('getData.php', function(data) { $('#likes').html(data); });
        }
    };

    $(document).ready(function() {
        setInterval(getData, 5000);
        $('.comm').click(function() { poll = false; });
        $('.comm').blur(function() { poll = true; });
    });
</script>

答案 2 :(得分:3)

您的解决方案非常简单:

   $event = new EVTimer(10,2, function() {
         Do your things .. :)
   });

https://www.php.net/manual/en/ev.examples.php

答案 3 :(得分:0)

JavaScript在其他线程中执行setInterval以继续其代码流执行。但是php挂在您调用由for循环实现的函数的行上。 但是php支持多线程和分叉工具,但不建议使用它们,并且还没有线程安全性。

答案 4 :(得分:0)

我将保证您使用cron作业在代码中实现此类功能。 Cron将根据您提供的说明在后台运行。查看this article

答案 5 :(得分:0)

由于Web开发的异步概念与在不重新加载页面的情况下完成网页更改有关,因此,当我们在网页上需要这种效果时,我们一定不能总是奔向Ajax的困境。做一些工作,进入数据库@ sleep seconds,以获取一些数据集供我们使用,尤其是用于聊天应用程序。请参见以下代码:

function setInterval ( $func, $seconds ) 
{
      $seconds = (int)$seconds;
      $_func = $func;
      while ( true )
      {
            $_func;
            sleep($seconds);
      }
}

现在,假设我们有一个函数get_msg()进入数据库以下载一些信息,如果我们必须重复执行该操作而不重复使用按钮调用,那么请参见setInterval函数的用法上面带有get_msg函数。

setInterval ( get_msg(), 5 );

答案 6 :(得分:-1)

目前尚不清楚您想要达到的目标。

您是否知道PHP仅根据请求提供内容?

如果您希望服务器偶尔更新一次(例如文件),请使用cronjob(在* nix上)。

如果您希望WEBPAGE重新查询某些内容,请在javascript中执行此操作并调用提供新内容的PHP脚本。

答案 7 :(得分:-1)

与Javascript不同,PHP在服务器端执行。 PHP中没有setTimeout功能。你可以通过使用cronjobs或其他PHP脚本来调试你的脚本。