You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中display_errors设为stderr是否有效?配置异常咨询

关于PHP display_errors配置与文档不符的问题

我有一段时间没碰PHP了,最近发现错误在stdout和stderr的显示行为和官方文档描述不符,搞不清是配置问题还是文档过时了。

实际观察到的异常行为

  • 设置display_errors = stderr并没有把错误发送到stderr,反而让display_errors处于"On"状态,错误依然输出到stdout
  • phpinfo里这个设置显示为布尔值("On"或"Off"),但文档要求用字符串值

期望实现的效果

  • 错误/警告不会混入脚本输出(比如HTTP响应里的JSON或XML,不是终端默认混输的场景)
  • 执行docker logs [my container] -f 1>/dev/null过滤日志时能看到错误/警告

环境与配置尝试

我的环境是基于php:8-apache的Docker镜像,官方支持的全新配置。

最初在Dockerfile里这么配置,在php.ini末尾加两行:

FROM php:8-apache

# 选择php.ini版本
RUN mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini"

# 重定向错误到stderr
RUN echo "display_errors = stderr" >> "$PHP_INI_DIR/php.ini"
RUN echo "log_errors = 1" >> "$PHP_INI_DIR/php.ini"
...

但没达到预期,还是能在输出里看到警告和错误。反而设置display_errors = 0生效了,这和文档描述不符。

运行时覆盖的异常情况

当php.ini里display_errors设为0时,我尝试用ini_set('display_errors', 'stderr')在运行时覆盖,通过phpinfo()验证发现:

  • "master value"是Off(符合预期)
  • "local value"变成On(不符合预期),等于这个操作反而开启了display_errors,这也和文档不符。

当前配置详情

php --ini返回内容:

Configuration File (php.ini) Path: /usr/local/etc/php
Loaded Configuration File:         /usr/local/etc/php/php.ini
Scan for additional .ini files in: /usr/local/etc/php/conf.d
Additional .ini files parsed:      /usr/local/etc/php/conf.d/docker-php-ext-sodium.ini

docker-php-ext-sodium.ini里只有extension=sodium这一行。

内容的提问来源于stack exchange,提问作者geoffrey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 00:43:28