phpenv 中 user_ini.filename 默认为空字符串,需手动启用并设为“.user.ini”,且仅对 web 请求生效、支持有限配置项。

phpEnv 里 user_ini.filename 默认是关闭的
phpEnv 安装后,php.ini 中的 user_ini.filename 默认设为 ""(空字符串),相当于禁用用户级 INI 文件。哪怕你在项目目录放了 .user.ini,PHP 也完全不读——这不是你文件写错了,是根本没开这个开关。
必须显式设为 .user.ini(或自定义名)并确保 user_ini.cache_ttl 合理,否则改了文件也不会热生效。
- 编辑对应 PHP 版本的主
php.ini(路径类似:D:\phpEnv\php\php-8.2.12\php.ini) - 找到
;user_ini.filename = ".user.ini"这行,去掉分号,并确认值是你要用的文件名(推荐保持默认".user.ini") - 顺手检查
user_ini.cache_ttl:开发时建议设为5(秒),避免改完要等 300 秒才生效
Apache 下 .user.ini 只对当前目录及子目录生效,但有继承限制
phpEnv 默认集成 Apache,而 Apache 对 .user.ini 的加载遵循“就近优先 + 目录树向上查找”,但不会跨 <directory></directory> 边界穿透——比如你把网站根目录配在 D:\www\myapp,那么只有该目录及其子目录能触发加载,上级 D:\www 的 .user.ini 不会被读取。
- 确保
.user.ini放在 Web 入口所在目录(如index.php所在目录) - 不能放在
vendor/或runtime/这类非 Web 可达路径下 - 如果用了 Apache 的
Alias或VirtualDocumentRoot,需确认实际解析路径与配置目录一致
修改后必须重启 Apache,且 phpinfo() 要验证两处
只改 php.ini 不重启 Apache,新设置完全不生效;即使重启了,也要确认是否真被加载,因为 phpEnv 多版本共存时容易选错配置文件。
- 重启 Apache(用 phpEnv 控制面板点「重启 Web 服务」,别只重启 PHP-FPM)
- 在项目里建个
info.php,内容为<?php phpinfo(); ?>,访问它 - 搜索页面中的
user_ini.filename行:值应为.user.ini(不是no value) - 再搜
Loaded Configuration File,确认显示的是你刚编辑的那个php.ini路径
.user.ini 只支持有限指令,extension 和 auto_prepend_file 这类会被忽略
这是最容易踩的坑:以为 .user.ini 是 mini php.ini,结果写了 extension=redis.so 发现没加载,或者 auto_prepend_file 完全不触发——因为 PHP 明确规定,只有 PHP_INI_USER 类型的指令才允许在 .user.ini 中设置。
- 常见支持项:
upload_max_filesize、post_max_size、max_execution_time、date.timezone、error_reporting - 明确不支持:
extension、zend_extension、auto_prepend_file、include_path(注意:部分旧版 PHP 允许include_path,但 PHP 7.4+ 已移除支持) - 不确定某指令是否支持?查官方文档中该配置项的「可修改范围」字段,必须含
PHP_INI_USER
最常被忽略的是:phpEnv 的 Apache 模块和 CLI 使用的是同一份 php.ini,但 .user.ini 仅对 Web 请求有效,CLI 下运行 php script.php 完全不读它——调试时别用 CLI 测试 .user.ini 效果。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











