【问题标题】:Get full output from a PHP script从 PHP 脚本获取完整输出
【发布时间】:2012-10-01 09:57:53
【问题描述】:

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

cronMail('Cron', ob_get_contents());

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

邮件中的输出是:

array()

虽然终端有以下输出:

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

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

【问题讨论】:

  • "[..] 只会发送到一个邮件地址。但问题是我需要在我自己的邮箱中接收输出的副本。” .... 为什么不将它发送到 两个 电子邮件地址?你知道:密件抄送之类的。
  • @KingCrunch:cron 将输出(如果有)发送到根邮件。
  • @hakre 啊,我以为工作本身会发送一封邮件(单独)。好的,知道了。
  • 我认为 OP 希望通过电子邮件发送 PHP 脚本的输出。但是您突出显示副本,我也应该将其添加到答案中。

标签: php stdout


【解决方案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 函数中进行一些错误报告,这将很有用,因此至少有一些方法可以进一步调试它。

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

【讨论】:

  • 你是对的。我以不同的方式将 ob_flush 放入脚本中,因此它只会在文件被浏览器调用而不是终端窗口/cron 时调用。
猜你喜欢
  • 2012-02-01
  • 2011-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-19
  • 1970-01-01
  • 1970-01-01
  • 2017-11-07
相关资源
最近更新 更多