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

在IIS部署CodeIgniter项目:默认控制器失效且出现PHP弃用错误

解决IIS部署CodeIgniter时的动态属性弃用错误

错误原因

你遇到的Creation of dynamic property CI_URI::$config is deprecated错误,是因为PHP 8.2及以上版本禁止动态创建类未声明的属性,而旧版本CodeIgniter的CI_URI类没有提前声明$config属性,直接赋值触发了弃用警告,导致默认控制器无法正常加载。

解决方案

1. 修复CodeIgniter核心类属性声明

找到项目中的core/URI.php文件,打开后在CI_URI类的顶部添加public $config;属性,示例如下:

class CI_URI {
    public $config; // 添加这行声明
    public $uri_string;
    public $segments = array();
    public $rsegments = array();
    // ... 其他原有代码
}

保存文件后重新访问站点,警告会消失,默认控制器应该能正常加载。

2. 匹配CodeIgniter与PHP版本兼容性

如果你的CodeIgniter版本过旧(比如3.1.12及以下),本身不支持PHP 8.2+,建议:

  • 升级CodeIgniter到最新稳定版(3.x分支或4.x,根据项目需求选择)
  • 或者降级PHP到7.4版本,该版本允许动态创建类属性,不会触发此警告

3. 验证IIS关键配置(补充检查)

虽然你已配置相关模块,但可以再确认以下点:

  • URL重写规则:确保web.config中的重写规则正确转发非文件/目录请求到index.php,示例规则:
    <configuration>
        <system.webServer>
            <rewrite>
                <rules>
                    <rule name="CodeIgniter Rewrite" stopProcessing="true">
                        <match url="^(.*)$" />
                        <conditions>
                            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                        </conditions>
                        <action type="Rewrite" url="index.php/{R:1}" />
                    </rule>
                </rules>
            </rewrite>
        </system.webServer>
    </configuration>
    
  • 应用池设置:确保站点对应的应用池选择.NET CLR版本为无托管代码,避免冲突。

4. 临时隐藏警告(不推荐长期使用)

如果需要临时恢复站点运行,可修改PHP的错误报告级别:

  • 打开php.ini文件,设置error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
  • 或者在项目根目录的index.php开头添加:
    error_reporting(E_ALL & ~E_DEPRECATED);
    

注意:此方法只是隐藏警告,并未解决根本问题,长期使用可能掩盖其他潜在错误。

内容的提问来源于stack exchange,提问作者S. Thomas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:41:34