到期时间会导致缓存错误

时间:2013-03-06 21:35:30

标签: php caching yii

我正在使用文件缓存(CFileCache)来显示来自数据库表的简单消息。 第一次页面加载时它工作正常,但是当我重新加载页面时,它会产生一个错误: include(CTimestampBehavior.php)[function.include]:无法打开流:没有这样的文件或目录

并且此错误一直持续到TIME EXPIRATION,我在cache-> set()中设置并且下一页加载一次并再次出错,依此类推。

这是我处理缓存的方法:

public static function getLatest()
    {

        //see if it is in the cache, if so, just return it
        if( ($cache=Yii::app()->cache)!==null)
        {

            $key='TrackStar.ProjectListing.SystemMessage';
            if(($sysMessage=$cache->get($key))!==false)
            return $sysMessage;
        }
        //The system message was either not found in the cache, or
        //there is no cache component defined for the application
        //retrieve the system message from the database

        $sysMessage = SysMessage::model()->find(array(
        'order'=>'t.update_time DESC',
        ));
        if($sysMessage != null)
        {
            //a valid message was found. Store it in cache for future retrievals
            if(isset($key))
                //$cache->set($key,$sysMessage,300);
                $cache->set($key, $sysMessage, 300, new CDbCacheDependency('SELECT MAX(update_time) FROM tbl_sys_message'));
            return $sysMessage;
        }
        else
        return null;
    }

此行出现错误:

if(($sysMessage=$cache->get($key))!==false)

我是Yii的新手并且缓存并且不知道它。

更新: AR模型的行为方法:

public function behaviors()
        {
            return array(
                'CTimestampBehavior' => array(
                'class' => 'zii.behaviors.CTimestampBehavior',
                'createAttribute' => 'create_time',
                'updateAttribute' => 'update_time',
                'setUpdateOnCreate' => true,
                ),
            );
        }

1 个答案:

答案 0 :(得分:1)

看起来您的问题是:

  • framework / zii / behaviors / CTimestampBehavior.php缺失
  • framework / zii / behaviors / CTimestampBehavior.php没有正确的权限供服务器用户阅读
  • 您正在使用操作码缓存(APC?),并且在这方面存在一些问题(尽管这些报告似乎是随机发生的)。尝试禁用它。
  • 由于某些未知原因,Yii不会导入您的zii路线

无论如何,我建议尝试将“zii.behaviors.CTimestampBehavior”添加到main.php配置文件“import”部分。或者只是调用Yii :: import('zii.behaviors.CTimestampBehavior');在你的功能。希望这有效,你可以继续工作,同时在你有时间的时候潜入水中。

如果不是,您可以调查以上内容(至少来到这里的人会有更多信息可以使用)