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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:57:05