PHP sleep() 内部循环不更新数据库

标签 php mysql loops sleep flush

我有一个每分钟由 cronjob 触发的 php 文件。

当 php 文件启动时,它会更新数据库、休眠等

程序是这样的:

$start = microtime(true);
set_time_limit(10);

for($i=0;$i<5;$i++)
{
    updateDB();
    time_sleep_until($start + $i + 1);
}

如果运行这段代码,我看不到数据库中发生任何变化。我注意到的另一件事是,当我回显某些内容时,我会在循环结束时打印出来。

[edit] 我尝试使用 flush 和 ob_flush,但它仍然没有逐行打印[/edit]

我该怎么做才能避免这些错误。数据库需要更新。

我想知道的另一件事是最好的方法是记录这种事情。我可以将结果记录到日志文件中吗?

最佳答案

循环本身看起来不错。如果它没有更新您的数据库,则错误一定在您的 updateDB() 函数中。

至于 echo 的事情。脚本的输出通常是缓冲的。要强制 PHP 立即打印它,您可以调用任一调用 flush()每当你想要刷新输出时,或者你可以调用 ob_implicit_flush()在脚本的顶部,每次打印时它都会自动刷新。

此外,如果您通过浏览器调用脚本,浏览器本身可能会在显示给您之前进一步缓冲响应。

关于日志记录,最简单的方法是在某处选择一个文件并使用file_put_contents()。打印你想要记录的任何内容。请注意第三个参数的 FILE_APPEND 标志。

关于PHP sleep() 内部循环不更新数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1787068/

相关文章:

postgresql - postgresql 中的嵌套循环问题

php - FTPS 问题 : "A TLS packet with unexpected length was received."

php - Ratchet php/棘爪连接关闭(1009 - )FRAME::CLOSE_TOO_BIG = 1009

mysql - 业力追踪报告 : Should use redis-only or redis-mysql hybrid?

mysql - 在 MySQL 中将行汇总为平均值

java - 使用循环内初始化的对象/变量?

python - 在Python中循环列表和嵌套列表

php - 逗号分隔值到选择查询

php - 计算键为数字的数组元素

mysql - 这个MySQL连接查询可以优化吗?