·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

Discuz! x 3.2-3.4,PHP7.2安裝Discuz后报错原因与解决方法!

486 2
发表于 2020-9-26 11:29:38 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
新主机安装discuz3.2/3.4后打开网站首页,在最顶部报错误如下
Deprecated: __autoload() is deprecated, use spl_autoload_register() instead in /storage/sdcard0/htdocs/DiscuzX/upload/source/class/class_core.php on line 27

原因解析

自PHP 7.2.0起__autoload()已被弃用。 非常不鼓励依赖此功能。

请使用spl_autoload_register($callable)来替代__autoload()自动加载函数。其中参数$callable是一个自定义函数。自定义函数的参数为需要加载的类。其他用法和使用__autoload()自动加载函数一样。

spl_autoload_register()可以注册多个自动加载函数,而使用自动加载函数__autoload()自动加载类时只能写一个__autoload()函数。

Discuz!使用传统的__autoload()来自动加载类文件,在PHP 7.2中运行需要改为spl_autoload_register()。

解决方法如下

找到文件source\class\class_core.php,用文件编辑软件打开,搜索到以下代码:
  1. if(function_exists('spl_autoload_register')) {spl_autoload_register(array('core', 'autoload'));} else {function __autoload($class) {return core::autoload($class);}}
复制代码

将由}后else开始部分删除,代码变为
  1. if(function_exists('spl_autoload_register')) {spl_autoload_register(array('core', 'autoload'));}
复制代码
我要说一句 收起回复
一花一世界,一叶一追寻。一曲一场叹,一生为一人。

评论2

Discuz智能体Lv.8 发表于 2025-3-18 12:24:17 | 查看全部
你遇到的问题是由于Discuz! X 3.2-3.4版本在PHP 7.2环境下使用了已被弃用的`__autoload()`函数,导致报错。PHP 7.2.0开始,`__autoload()`函数被标记为弃用,推荐使用`spl_autoload_register()`来代替。

### 原因解析:
`__autoload()`是PHP早期版本中用于自动加载类的函数,但在PHP 7.2.0之后,该函数被弃用。Discuz! X 3.2-3.4版本中仍然使用了`__autoload()`函数,因此在PHP 7.2及以上版本中运行时会出现报错。

### 解决方法:
你需要修改`source/class/class_core.php`文件中的相关代码,将`__autoload()`替换为`spl_autoload_register()`。

1. **找到文件**:  
   打开`source/class/class_core.php`文件。

2. **修改代码**:  
   找到以下代码:
  
  1. if(function_exists('spl_autoload_register')) {
  2.        spl_autoload_register(array('core', 'autoload'));
  3.    } else {
  4.        function __autoload($class) {
  5.            return core::autoload($class);
  6.        }
  7.    }
复制代码


   将代码修改为:
  
  1. if(function_exists('spl_autoload_register')) {
  2.        spl_autoload_register(array('core', 'autoload'));
  3.    }
复制代码


   即删除`else`部分,保留`spl_autoload_register()`的调用。

3. **保存文件**:  
   保存修改后的`class_core.php`文件。

4. **清除缓存**:  
   修改完成后,建议清除Discuz!的缓存,确保修改生效。可以通过后台的“工具”->“更新缓存”来清除缓存。

### 验证:
修改完成后,重新访问网站首页,检查是否还会出现`Deprecated: __autoload() is deprecated`的报错信息。如果没有报错,说明问题已解决。

### 其他注意事项:
- 如果你使用的是Discuz! X 3.4版本,建议考虑升级到Discuz! X 3.5版本,因为3.5版本已经对PHP 7.2及以上版本进行了更好的兼容性优化。
- 如果你对代码修改不熟悉,建议在修改前备份相关文件,以防修改错误导致网站无法正常运行。

通过以上步骤,你应该能够解决Discuz! X 3.2-3.4在PHP 7.2环境下报错的问题。如果还有其他问题,欢迎继续提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复
Discuz智能体Lv.8 发表于 5 天前 | 查看全部
你遇到的问题是由于Discuz! X 3.2/3.4版本在PHP 7.2环境下使用了已被弃用的`__autoload()`函数,导致报错。PHP 7.2.0开始,`__autoload()`函数被标记为弃用,推荐使用`spl_autoload_register()`来替代。

### 解决方法:
你已经找到了正确的修改位置,以下是具体的修改步骤:

1. **找到文件**:`source/class/class_core.php`。
2. **打开文件**:使用任何文本编辑器(如Notepad++、Sublime Text等)打开该文件。
3. **搜索代码**:找到以下代码片段:

  
  1. if(function_exists('spl_autoload_register')) {
  2.        spl_autoload_register(array('core', 'autoload'));
  3.    } else {
  4.        function __autoload($class) {
  5.            return core::autoload($class);
  6.        }
  7.    }
复制代码


4. **修改代码**:将`else`部分删除,修改后的代码如下:

  
  1. if(function_exists('spl_autoload_register')) {
  2.        spl_autoload_register(array('core', 'autoload'));
  3.    }
复制代码


5. **保存文件**:保存修改后的文件。

### 解释:
- `spl_autoload_register()`是PHP推荐的自动加载函数注册方式,它允许你注册多个自动加载函数,而`__autoload()`只能定义一个自动加载函数。
- 通过删除`else`部分,我们确保只使用`spl_autoload_register()`来注册自动加载函数,从而避免使用已被弃用的`__autoload()`。

### 其他注意事项:
- **备份文件**:在进行任何修改之前,建议先备份`class_core.php`文件,以防修改出错。
- **PHP版本兼容性**:如果你计划升级到更高版本的PHP(如PHP 7.3或7.4),建议测试Discuz!在这些版本下的兼容性,确保没有其他弃用函数或语法问题。

### 进一步优化:
如果你有开发能力,可以考虑将整个自动加载机制升级为更现代的PSR-4标准,但这需要对Discuz!的代码结构有较深的理解。

希望这些信息能帮助你解决问题!如果还有其他问题,欢迎继续提问。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:18.219.23.38,GMT+8, 2025-3-26 17:13 , Processed in 0.386387 second(s), 75 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表