PHP CLI 不使用 stderr 输出错误
我在 MacOS 中通过 NSTask 运行 PHP CLI,但这个问题更多的是关于 CLI 本身。
我正在监听 stderr
管道,但无论我尝试运行什么文件,都不会输出任何内容:
- 如果文件类型不是纯文本,则
stdout
设置为<代码>?。 - 如果文件是有错误的 php 脚本,错误消息仍会打印到
stdout
。
是否有切换到解释器来通过 stderr
处理错误?除了解析 stdout
之外,我是否可以选择检测错误?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
display_errors
指令(可以在任何地方设置)可选参数“stderr
”,以便将错误报告给 stderr 而不是 stdout 或完全禁用错误输出。引用PHP手册条目:或者,如果您使用命令行界面并且想要输出自己的错误,您可以重新使用 命令行输入/输出流:
这里
STDERR
是一个已经打开的stderr流。或者,如果您只想为此脚本而不是在 CLI 中执行此操作,您可以打开一个指向 php://stderr 的处理程序并在其中写入错误消息。
The
display_errors
directive (can be set everywhere) takes optionally the parameter "stderr
" for it to report errors to stderr instead of stdout or completely disabled error output. Quoting from the PHP manual entry:Alternatively if you're using the commandline interface and you want to output the errors your own you can re-use the command-line nput/output streams:
Here
STDERR
is an already opened stream to stderr.Alternatively if you want to do it just for this script and not in CLI you can open a filed handler to
php://stderr
and write the error messages there.如果您希望 php 解释器发送的错误消息应该发送到
stderr
管道,则必须设置display_errors
到stderr
If you want the error messages sent by the php interpreter should go to the
stderr
-pipe, you must setdisplay_errors
tostderr
这是从 PHP 领域返回到 shell 环境所必需的,以便正确解析错误消息。您仍然需要 exit(1) 或任何整数才能将退出状态代码从 PHP 返回到 shell。
然后,您的 crontab 条目将如下所示:
This is required to return from PHP realm into shell environment in order to parse properly error message. You still need to exit(1) or whatever integer in order to return exit status code from PHP to shell.
Then, your crontab entry will look like:
您还可以将 file_put_contents() 与 "php://stderr" 一起使用来输出到标准错误,例如:
输出“Hiya, PHP!\n”到标准错误在 Bash shell 中执行时,不会产生任何标准输出。
You can also use file_put_contents() with "php://stderr" to output to standard error, like:
which outputs "Hiya, PHP!\n" to standard error and nothing to standard output when executed in a Bash shell.