phpEnv 中 auto_prepend_file 必须通过 conf/user.ini 配置,直接修改 php.ini 无效;user.ini 为唯一生效入口,需用绝对路径,且 Web 与 CLI 模式配置分离。

phpEnv 下无法通过 php.ini 直接生效 auto_prepend_file,必须改用 phpEnv 自带的配置覆盖机制。
phpEnv 的 php.ini 是只读副本,直接编辑不生效
phpEnv 启动时会从模板生成运行时 php.ini,每次重启都会覆盖你手动改的 auto_prepend_file。常见现象是:改完 php.ini、重启服务、phpinfo() 里还是空值或旧路径。
- 真实生效的配置在
phpEnv\php\version\conf\php.ini(仅模板) - 运行时实际加载的是内存中动态生成的 ini,路径不固定
- 必须通过 phpEnv 提供的「用户配置覆盖」入口修改
正确设置 auto_prepend_file 的位置是 conf/user.ini
phpEnv 支持在 phpEnv\php\version\conf\user.ini 中写入覆盖项,该文件会被自动合并进运行时配置,且重启不丢失。
- 确保
user.ini文件存在(若无则新建) - 写入格式严格为 INI 风格,不能有 PHP 语法或注释符号
// - 路径必须为绝对路径,Windows 下注意反斜杠转义或用正斜杠
- 示例内容:
auto_prepend_file = "D:/phpEnv/www/prepend.php" auto_append_file = "D:/phpEnv/www/append.php"
保存后重启 phpEnv 的 Apache/Nginx 和 PHP-FPM(不是只点“重启PHP”),再看 phpinfo() 的 auto_prepend_file 行是否已更新。
立即学习“PHP免费学习笔记(深入)”;
路径和权限问题最容易导致 include 失败但无报错
即使配置显示已加载,auto_prepend_file 实际执行时失败往往静默跳过——尤其在 Windows 下路径错误或文件不可读时。
- PHP 不会因
auto_prepend_file文件不存在而报错,只会忽略(除非display_errors=On且文件存在但语法错误) - 检查
prepend.php是否能被 Web 用户(如 IIS_IUSRS 或 www-data)读取 - 避免使用相对路径、
./、../或环境变量(如%CD%),phpEnv 不解析这些 - 临时加一句
file_put_contents('D:/tmp/prepend_test.log', 'hit', FILE_APPEND);到prepend.php,确认是否真被调用
CLI 模式下 auto_prepend_file 默认不启用
phpEnv 的 Web 模式(Apache/Nginx)和 CLI 模式用的是两套配置。你在 user.ini 设的 auto_prepend_file 只影响 Web 请求,不影响 php -f xxx.php 或 Composer 命令。
- CLI 单独走
phpEnv\php\version\php-cli.ini(如有) - 若需 CLI 也生效,得在该文件里重复写一遍
auto_prepend_file - 验证方式:
php -i | findstr "auto_prepend_file"(Windows)或php -i | grep auto_prepend_file(Linux/macOS)
真正卡住人的地方,从来不是怎么写配置,而是 phpEnv 把「你改的 php.ini」和「它实际跑的 php.ini」分成了两件事——漏掉 user.ini 这层,就永远在原地重启。



















