public function cleanAllCache()
 {
     $array = list_dir_file($this->cacheDir);
     $array = $array ? $array : array();
     foreach ($array as $cacheFile) {
         if ($cacheFile['extension'] == 'cache') {
             @unlink($cacheFile['path']);
         }
     }
 }
Beispiel #2
0
/**
 * @des 获取指定logid的附图 方法体内部自动实现查询、缓存 提升系统执行效率
 * @des 注意:本方法额外添加了一个logimageatt缓存字段 方法体外部不宜调用该字段
 * CACHE structure::
 *  array{
 *   log_id => array('url'=>log_att_image_url,'time'=>unixtimestamp);
 * }
 * @param $logid 日志id
 * @return string => log attachement image url(include blog_url)
 */
function getLogImageAtt($logid)
{
    global $CACHE;
    /*缓存文件不存在,建立空值缓存文件先*/
    if (!is_file(EMLOG_ROOT . '/content/cache/logimageatt.php')) {
        $CACHE->cacheWrite(serialize(array(0 => array('url' => TEMPLATE_URL . 'images/noImg.png', 'time' => time()))), 'logimageatt');
    }
    $logImageAtt = $CACHE->readCache('logimageatt');
    if (!empty($logImageAtt) && !empty($logImageAtt[$logid])) {
        //12小时候重建缓存以处理可能要替换文章附图的情况 默认不重建
        if (_g('up_cache')) {
            if ($logImageAtt[$logid]['time'] + 12 * 3600 > time()) {
                return $logImageAtt[$logid]['url'];
            }
        } else {
            return $logImageAtt[$logid]['url'];
        }
    }
    //缓存中不存在 建立缓存并返回数据
    $Db = Database::getInstance();
    $query = $Db->query("SELECT * FROM " . DB_PREFIX . "attachment WHERE `blogid`=" . $logid . " ORDER BY `aid` DESC");
    $_attcache = TEMPLATE_URL . 'images/noImg.png';
    //待裁剪图片数据 优先使用已有220px*150px的附图
    $_imageArr = array('rdir' => '', 'cdir' => '', 'width' => 0, 'height' => 0);
    while ($row = $Db->fetch_array($query)) {
        if ($row['width'] == 220 && $row['height'] == 150) {
            $_attcache = BLOG_URL . ltrim(ltrim($row['filepath'], '.'), '/');
            break;
        }
        $fileAbsoluteDir = '.' . ltrim($row['filepath'], '.');
        //图片目录相对于入口文件的路径
        $suffix = strtolower(getFileSuffix($row['filepath']));
        /*兼容老系统产生的无宽度、高度的图片尺寸*/
        if (is_file($fileAbsoluteDir) && in_array($suffix, array('jpg', 'png', 'jpeg', 'gif')) && $row['width'] == 0 && $row['height'] == 0) {
            $size = @getimagesize($fileAbsoluteDir);
            //读取图片尺寸情况
            //方法getimagesize存在异常 返回false和错误信息 抑制并退出
            if (false === $size) {
                break;
            }
            if ($size[0] == 220 && $size[1] == 150) {
                $_attcache = BLOG_URL . ltrim(ltrim($row['filepath'], '.'), '/');
                break;
            } else {
                $row['width'] = $size[0];
                $row['height'] = $size[1];
            }
        }
        //缩略图相对路径 强行指定缩略图为jpg后缀格式
        $fileCorpDir = '.' . ltrim(pathinfo($fileAbsoluteDir, PATHINFO_DIRNAME), '.') . '/' . $logid . '.jpg';
        //依据设置参数进行是否强行重建
        if (is_file($fileCorpDir) && !_g('up_cache')) {
            $_attcache = BLOG_URL . ltrim(ltrim($fileCorpDir, '.'), '/');
            break;
        }
        //收集尺寸最大的图片进行裁剪
        if ($row['width'] > 220 && $row['height'] > 150) {
            if (is_file($fileAbsoluteDir) && ($row['width'] > $_imageArr['width'] || $row['height'] > $_imageArr['height'])) {
                $_imageArr = array('rdir' => $fileAbsoluteDir, 'cdir' => $fileCorpDir, 'width' => $row['width'], 'height' => $row['height']);
            }
        }
    }
    //附图需要进行裁剪
    if ($_attcache == TEMPLATE_URL . 'images/noImg.png' && $_imageArr['width'] > 0) {
        $ret = JcorpImage($_imageArr['rdir'], $_imageArr['cdir'], $_imageArr['width'], $_imageArr['height']);
        if ($ret) {
            $_attcache = BLOG_URL . ltrim(ltrim($_imageArr['cdir'], '.'), '/');
        }
    }
    //是否启用随机默认附图
    if ($_attcache == TEMPLATE_URL . 'images/noImg.png' && _g('open_rdm')) {
        $randomeImage = list_dir_file(EMLOG_ROOT . '/content/templates/J2/images/randoms/');
        $max = count($randomeImage) - 1;
        $rdmKey = rand(0, $max);
        $_attcache = $randomeImage[$rdmKey];
    }
    //添加新单元数据
    $logImageAtt[$logid] = array('url' => $_attcache, 'time' => time());
    $CACHE->cacheWrite(serialize($logImageAtt), 'logimageatt');
    return $_attcache;
}