PHP CodeIgniter无法加载.env环境变量,访问SERVER_PORT报错如何处理?
问题原因
- CodeIgniter 加载的
.env配置不会自动写入 PHP 的$_SERVER超全局数组,你在.env中定义的SERVER_PORT只能通过 CI 提供的env('SERVER_PORT')辅助函数,或原生getenv('SERVER_PORT')读取,无法直接从$_SERVER数组取值。 - 报错代码直接调用了
$_SERVER['SERVER_PORT'],而通过php index.php serve启动服务的场景下,CI 没有自动将该变量填充到$_SERVER数组,因此触发索引不存在的错误。 - 额外注意:如果你使用的是 CodeIgniter 4,官方内置服务的启动命令为
php spark serve,你当前用的php index.php serve本身就是错误命令,会导致 env 加载逻辑未正常执行;CodeIgniter 3 没有官方内置的 serve 命令。
解决方法
方案1:快速启动项目(无需修改代码)
直接使用 PHP 自带的内置服务器启动,PHP 会自动填充$_SERVER相关变量,执行以下命令即可:
php -S localhost:8000 index.php
启动后访问 http://localhost:8000 即可正常访问项目。
方案2:修复代码兼容性(推荐)
修改application/config/config.php中触发报错的代码,增加兼容判断,优先读取$_SERVER的变量,不存在时从.env取值:
$isHttps = !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'; $serverPort = isset($_SERVER['SERVER_PORT']) ? $_SERVER['SERVER_PORT'] : env('SERVER_PORT', 80); $protocol = ($isHttps || $serverPort == 443) ? "https://" : "http://";
修改后无论用哪种方式启动服务都不会再触发该报错。
内容的提问来源于stack exchange,提问作者Shwetanka
相关产品推荐
相关产品推荐

