15

我想问一下,我怎样才能像 Javascript 中的 setInterval 一样在一段时间后自动一次又一次地使用 php 函数。我们设置了时间,它一直在工作,直到脚本中止或关闭。

索引.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 中获取数据。所以,它将被更新。

4

8 回答 8

29

郑重声明:我认为这是个坏主意。但是无所谓 :)

试试这个代码

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);
于 2012-10-08T14:39:38.163 回答
8

您的解决方案非常简单:

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

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

于 2019-09-11T15:20:53.403 回答
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>
于 2012-10-08T14:34:29.263 回答
0

目前尚不清楚您想要实现的具体目标。

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

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

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

于 2012-10-08T14:33:13.103 回答
0

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

于 2012-10-08T14:35:36.300 回答
0

我建议您使用 cron 作业在代码中实现此类功能。Cron 将根据您给出的指令在后台运行。看看这篇文章

于 2020-03-17T09:50:06.063 回答
0

由于 Web 开发的异步概念与在不重新加载页面的情况下对网页进行更改有关,所以当我们需要对我们的网页产生此类效果时,我们不能总是跑到 Ajax 的海湾,PHP 可以简单地完成这项工作去数据库@ 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 );
于 2020-07-17T13:27:16.773 回答
-1

JavascriptsetInterval在其他线程中执行以继续其代码流执行。但是php挂在你调用for循环实现的函数的那一行。然而 php 支持多线程和分叉工具,但不推荐使用它们,也不是线程安全的。

于 2019-01-26T13:36:35.517 回答