如何在PHP中使用setInterval?

Hea*_*art 14 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>
    <?
}
?>
Run Code Online (Sandbox Code Playgroud)

而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;
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

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

Rus*_*gan 25

记录:我认为这是个坏主意.但是无所谓 :)

试试这个代码

function setInterval($f, $milliseconds)
{
    $seconds=(int)$milliseconds/1000;
    while(true)
    {
        $f();
        sleep($seconds);
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

setInterval(function(){
    echo "hi!\n";
}, 1000);
Run Code Online (Sandbox Code Playgroud)

要么:

$a=1; 
$b=2;

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

  • @b_dubb:因为它的行为与javascript中的`setInterval`不同.当JS - 这样做时,这种实现不允许在"后台"执行某些任务.因为JS是异步的,PHP - 不是.这就是为什么我认为这是一个坏主意. (4认同)
  • @EdwardBlack:因为setInterval-call之后的代码只会运行__after__ setInterval结束.由于setInterval是基本无限循环 - 它旁边的代码将__never__运行.PHP不是异步的. (3认同)
  • 为什么你认为这是个坏主意? (2认同)

Sol*_*Sol 7

我建议使用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>
Run Code Online (Sandbox Code Playgroud)


ela*_*dcm 7

您的解决方案非常简单:

   $event = new EVTimer(10,2, function() {
         Do your things .. :)
   });
Run Code Online (Sandbox Code Playgroud)

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

  • 这实际上是我第一次看到低代表用户在一个多年历史的问题上贡献一些有意义的东西。好的!希望以后能看到您更多好的答案。 (2认同)