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
相关产品推荐
相关产品推荐

