【问题标题】:Output a STDERR for PHP errors without changing php.ini在不更改 php.ini 的情况下输出 PHP 错误的 STDERR
【发布时间】:2020-11-23 14:03:43
【问题描述】:

我有一些 PHP 脚本通过 CRON 每分钟运行一次。我不想在每次它们正常运行时都收到电子邮件,但如果它们抛出错误(例如,如果它们使用太多内存),我确实希望收到一封电子邮件。

运行 CRON:

          • php myscript.php >/dev/null

这应该只在stderr 的结果不为空时发送电子邮件,即出现标准错误时。

但是,PHP 错误不会创建 stderr,而是包含在 stdout 中,因此不会发送电子邮件。

我尝试将display_errors 设置为stderr,如this question 所示,但这是一个不同的用例,因为脚本不是由 CRON 运行的。我尝试了以下方法,但没有奏效:

在脚本本身中包含这个不起作用,因为致命错误意味着脚本无法运行:

ini_set ('display_errors', 'stderr');

将其包含在 .htaccess 文件中(注意使用 PHP FPM)不起作用 - 我不知道为什么:

php_flag display_errors stderr

更改 php.ini 文件不是一个选项,因为我不希望更改影响整个站点,只影响几个文件。

所以我的问题是 - 如何将 PHP 错误发送到 stderr 以便我可以通过电子邮件接收它们?

【问题讨论】:

    标签: php .htaccess error-handling cron stderr


    【解决方案1】:

    php 可执行文件采用命令行选项 - 您可以指定 which 它应该使用的 php.ini,或者通过 -d 参数设置特定的配置选项。

    https://www.php.net/manual/en/features.commandline.options.php

    【讨论】:

    • 感谢您的回答 - 这是否意味着我可以专门为我希望它影响的脚本添加一个 php.ini 文件?
    • 是的,您可以使用php -c /path/to.php.ini 指定它应该使用哪个php.ini 来执行指定的脚本文件。如果您除了发送错误输出的位置之外不需要更改任何内容,那么 php -d display_errors=stderr 也可以在这里完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 2016-09-25
    相关资源
    最近更新 更多