3

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

当 php 文件被触发时,它会更新数据库、休眠等

它是这样编程的:

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

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

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

[编辑] 我尝试使用 flush 和 ob_flush,但它仍然没有为 line 打印 line[/edit]

我能做些什么来避免这些错误。数据库需要更新。

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

4

2 回答 2

4

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

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

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

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

于 2009-11-24T00:53:18.553 回答
0

看起来您是从命令行运行的,在这种情况下,您可能希望写入 stderr 以便没有缓冲。$stderr = fopen('php://stderr', 'w');

在记录的情况下,只需打开一个文件,写入它,然后关闭它。(fopen, fwrite, fclose);

于 2009-11-24T01:19:17.470 回答