从PHP脚本获取完整输出

时间:2012-10-01 09:57:53

标签: php stdout

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

cronMail('Cron', ob_get_contents());

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

邮件中的输出是:

array()

终端有以下输出:

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

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

1 个答案:

答案 0 :(得分: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函数中执行一些错误报告,这可能很有用,这样至少有一些方法可以进一步调试它。

另一种方法是注册一个输出处理函数,用于存储输出。但这不是那么简单,所以我坚持下去。