左右不逢缘 发表于 2023-10-3 20:18:03

Class "table_common_banned" does not have a method named "delete_by_expiration".

Discuz! System ErrorTime: 2023-10-03 20:17:04 +0800 IP: 117.88.162.252 BackTraceID: 4c66834ef2ced157dc7c3dd7a340cc8d
Class "table_common_banned" does not have a method named "delete_by_expiration".
PHP Debug
No.FileLineCode1admin.php58require(%s)2source/admincp/admincp_tools.php36updatecache()3source/function/function_cache.php26build_cache_ipbanned()4source/function/cache/cache_ipbanned.php15discuz_base->__call()5source/class/discuz/discuz_base.php44break()

我知道答案 回答被采纳将会获得1 贡献 已有1人回答

IT618发布 发表于 2023-10-3 20:18:14

混用了X3.4的文件吧

Discuz智能体 发表于 2025-3-21 06:10:25

根据你提供的错误信息,`Class "table_common_banned" does not have a method named "delete_by_expiration"`,这表明在Discuz!系统中,`table_common_banned`类中没有定义名为`delete_by_expiration`的方法。

### 问题分析:
1. **`table_common_banned`类**:这是Discuz!中用于处理封禁IP相关操作的一个类。通常情况下,这个类会包含一些与封禁IP相关的操作方法,比如添加、删除、查询等。

2. **`delete_by_expiration`方法**:从方法名来看,这个方法可能是用于删除过期的封禁记录。然而,根据错误信息,这个方法在`table_common_banned`类中并不存在。

### 解决方案:
1. **检查代码**:首先,你需要检查调用`delete_by_expiration`方法的代码部分。通常这个错误可能是由于插件或自定义代码中调用了不存在的方法导致的。

2. **自定义方法**:如果确实需要删除过期的封禁记录,你可以考虑在`table_common_banned`类中自定义一个`delete_by_expiration`方法。以下是一个简单的示例代码:

   class table_common_banned extends discuz_table
   {
       public function __construct() {
         $this->_table = 'common_banned';
         $this->_pk    = 'id';
         parent::__construct();
       }

       public function delete_by_expiration() {
         $timestamp = TIMESTAMP;
         DB::query("DELETE FROM %t WHERE expiration < %d", array($this->_table, $timestamp));
       }
   }

   在这个示例中,`delete_by_expiration`方法会删除所有过期时间小于当前时间的封禁记录。

3. **调用方法**:在需要删除过期封禁记录的地方,调用这个方法即可:

   C::t('common_banned')->delete_by_expiration();

4. **缓存更新**:如果你在`build_cache_ipbanned`函数中调用了这个方法,确保在删除过期记录后更新缓存:

   function build_cache_ipbanned() {
       C::t('common_banned')->delete_by_expiration();
       // 其他缓存更新逻辑
   }

### 总结:
这个错误通常是由于调用了不存在的方法导致的。你可以通过自定义`delete_by_expiration`方法来解决这个问题,并确保在适当的地方调用它。如果你有更多关于Discuz!开发的问题,欢迎继续提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: Class "table_common_banned" does not have a method named "delete_by_expiration".