在PHP中写入到STDERR的内容到哪里去了?
我知道,如果未设置在PHP中写入到STDERR的内容到哪里去了?,php,error-handling,stderr,Php,Error Handling,Stderr,我知道,如果未设置error\u log配置指令,则会将错误发送到SAPI错误记录器。例如,它是Apache中的错误日志或CLI中的stderr 因此,如果从命令行运行脚本,错误将直接显示(除非重定向)。如果我从cron运行脚本,错误将通过电子邮件发送给cron作业所有者。那么,如果我将电子邮件传输到脚本会发生什么 我刚开始写一个脚本来处理反弹消息。我已经读到,如果脚本输出任何内容,它将返回给发送者。我不确定这是否适用于所有输出或只是标准输出。或者STDERR是否等于CLI中的STDOUT 如果
error\u log
配置指令,则会将错误发送到SAPI错误记录器。例如,它是Apache中的错误日志或CLI中的stderr
因此,如果从命令行运行脚本,错误将直接显示(除非重定向)。如果我从cron运行脚本,错误将通过电子邮件发送给cron作业所有者。那么,如果我将电子邮件传输到脚本会发生什么
我刚开始写一个脚本来处理反弹消息。我已经读到,如果脚本输出任何内容,它将返回给发送者。我不确定这是否适用于所有输出或只是标准输出。或者STDERR是否等于CLI中的STDOUT
如果我将error\u log
configuration指令设置为一个文件,那么我是否可以使用trigger\u error
和error\u log
功能安全地输出错误消息而不向发送方发送反弹
由于脚本正在处理反弹,我真的希望避免反弹回发送方。我想这会导致一个无限循环。由于错误日志位于另一个目录中,并且路径设置在一个include文件中,所以在我设置配置指令之前,很可能会出现一些错误。在脚本的最顶端使用
ini\u set('error\u log','syslog')
,然后尽快将其更改为我的文件,这是一个好主意吗?使用CLI时,stdout和stderr
都位于同一位置。对于cron,输出通过电子邮件发送给cron作业所有者。对于命令行,输出被发送到终端。将一个程序的输出传递给另一个程序(通过管道)时,输出返回到第一个程序。它用它做什么将取决于程序
使用CLI时指定错误位置的最简单方法是在命令行上指定它。因此,如果将电子邮件传送到脚本,可以使用以下方法:
| /usr/bin/php /path/to/script/script.php 2> /path/to/log/error.log
编号2
是stderr
的文件句柄,
将其重定向到指定的文件
PHP配置指令
对于不同的PHP配置指令,它们在CLI中的行为确实不同。显然,在某些版本/系统上存在一个bug,无论配置设置如何,错误都不会写入日志
以下是在我的系统(Centos 6上的PHP 5.3)上使用CLI进行测试的结果:
- 如果启用了
,则将log\u errors
设置为0不会停止显示错误。除非在命令行上重定向,否则错误将与标准输出(stdout)位于同一位置display\u errors
- 如果
处于关闭状态,并且log\u errors
处于关闭状态,则不会报告任何错误display\u errors
- 如果启用了
,并且将log\u errors
设置为文件(具有适当的权限),则错误将转到该文件error\u log
- 如果启用了
,并且log\u errors
设置为“syslog”,则错误将转到/var/log/messageserror\u log
- 如果启用了
,并且启用了log_errors
,则会输出两条错误消息:一条带有“PHP”前缀,另一条没有display_errors
- 我能看到的唯一区别是将
设置为1和将其设置为'stderr',前者打印了一个额外的换行符display\u errors
stdout
的位置
可供替代的
您可以允许邮件进入邮箱,而不必担心返回给发件人的输出是什么。然后使用PHP函数读取邮件。PHP脚本可以作为cron作业运行,然后任何错误消息都会发送给cron作业所有者。将电子邮件发送到脚本是什么意思?使用
|/path/to/PHP/path/to/script
将传入的电子邮件(针对特定地址)发送到脚本。脚本将读取STDIN以获取传入的电子邮件。我想您将使用自定义的POP客户端,将邮箱中的内容回显到stdout
?邮件不会发送到邮箱,因为它是由qmail通过管道发送到脚本的。没有邮箱。地址是一个别名。脚本将解析电子邮件中的一些信息,并将一些内容存储到数据库中。