-1

我每天晚上都在运行一个脚本,脚本的输出只会发送到一个邮件地址。但问题是我需要在自己的邮箱中接收输出的副本。我在脚本中注册了一个关闭处理程序,并尝试发送一封邮件,其中包含实际显示数据的 ob_get_contents 等函数。但只有我打印到终端的最后一件事。

cronMail('Cron', ob_get_contents());

调用的函数只是一个简单的函数,它添加了默认的接收者和发送者,并调用了 PHP Mail 函数。

邮件中的输出是:

array()

虽然终端有以下输出:

Starting cron...
Exiting...
array()

谁能告诉我如何接收整个输出?我使用 ob_start 方法启动了输出缓冲区。在每一行之后,我确保调用了一个 ob_flush 方法,因此如果直接调用脚本,输出也将发送到浏览器。

4

1 回答 1

1

ob_flush挡住你的路,请参阅手册页上的链接描述,这很清楚:它刷新缓冲区以便输出它。

你不希望出现这种情况。删除对它的调用,你应该没问题。

ob_start();

... your script without "ob_flush()" ...

$buffer = ob_get_clean();  # finally get the output buffer as string
echo $buffer;              # pass output along for cron
cronMail('Cron', $buffer); # send your mail

此变体可确保您获得自己的电子邮件,但输出也会传递给 cron。如果您在函数中执行一些错误报告,这可能很有用cronMail,因此至少有一些方法可以进一步调试它。

另一种选择是注册一个输出处理函数,该函数在运行时存储输出。但这不那么微不足道,所以我把它排除在外。

于 2012-10-01T10:00:11.293 回答