当前位置:首页 > 行业动态 > 正文

如何在DEDECMS v5.7中解决发布图集时无法获取缩略图的问题?

在DEDECMS v5.7中,发布图集时不能获取缩略图的问题可以通过以下方法解决:,,1. 确保你已经正确安装了DEDECMS v5.7,并且已经配置好了相关的环境。,,2. 检查你的图集文件夹中是否有缩略图文件。如果没有,请先生成缩略图文件。,,3. 在后台管理系统中,找到“系统” > “系统基本参数” > “附件设置”,确保“缩略图默认路径”和“缩略图默认名称”设置正确。,,4. 如果以上步骤都无法解决问题,可能是系统缓存导致的。请尝试清除系统缓存,然后重新生成缩略图。,,5. 如果问题仍然存在,建议查看系统日志,查找可能的错误信息,或者寻求专业人士的帮助。

在DEDECMS v5.7发布图集时,有时会遇到不能获取缩略图的问题,这通常是由于系统设置或代码问题造成的,以下是一些常见的解决办法:

一、修改文件/include/dedehttpdown.class.php

1、问题原因:服务器上禁用了fsockopen()函数。

2、解决方案:打开/include/dedehttpdown.class.php文件,找到第507行,将原来的代码:

$this>m_fp = @fsockopen($this>m_host, $this>m_port, $errno, $errstr, 10);

替换为:

$this>m_fp = @stream_socket_client($this>m_host . ':' . $this>m_port, $errno, $errstr, 10);

二、修改文件/dede/inc/inc_archives_functions.php

1、问题原因:传递给GetDDImage函数的目录名不正确,导致无法生成缩略图。

2、解决方案:打开/dede/inc/inc_archives_functions.php文件,找到以下代码:

if(!is_file($cfg_basedir.$litpic)) $litpic = '';

将其替换为:

if(!is_file($cfg_basedir.$litpic)) $litpic = $picname;

三、修改文件/dede/article_add_action.php和/dede/article_edit_action.php

1、问题原因:自动获取缩略图功能失效。

2、解决方案:打开/dede/article_add_action.php和/dede/article_edit_action.php文件,找到//自动获取缩略图这一段代码,将其改为以下部分,自动取第一张或最后一张都可以,注释掉不需要的那个:

// 自动获取缩略图
if($autolitpic == 1 && $litpic == '') {
    // 自动从第一张图生成
    $litpic = GetFirstImage($body);
} else if($autolitpic == 2 && $litpic == '') {
    // 自动从最后一张图生成
    $litpic = GetLastImage($body);
}

四、修改文件/include/helpers/extend.helper.php

1、问题原因:缩略图尺寸自适应调用尺寸及缩略图自动裁剪问题。

2、解决方案:打开/include/helpers/extend.helper.php文件,在最下面加上以下代码:

if (!function_exists('thumb')) {
    function thumb($imgurl, $width, $height, $type='jpg', $w=0, $h=0, $crop=false) {
        if ($w <= 0 || $h <= 0 || empty($imgurl)) return false;
        $info = pathinfo($imgurl);
        if (!in_array(strtolower($info['extension']), array('jpg', 'jpeg', 'gif', 'png'))) return false;
        $newimg = str_replace(array('.thumb.', '.small.'), array('.', ''), $imgurl);
        if (file_exists($newimg)) {
            @unlink($newimg);
        }
        $newimg = $info['dirname'] . '/' . $info['filename'] . '.thumb.' . $info['extension'];
        $srcimgsize = getimagesize($imgurl);
        list($srcwidth, $srcheight) = $srcimgsize;
        if ($srcwidth <= $w && $srcheight <= $h) {
            if ($srcwidth > $w || $srcheight > $h) {
                $ratio = min($w / $srcwidth, $h / $srcheight);
                $newwidth = ceil($srcwidth * $ratio);
                $newheight = ceil($srcheight * $ratio);
                $srcx = 0;
                $srcy = 0;
            } else {
                $newwidth = $srcwidth;
                $newheight = $srcheight;
                $srcx = 0;
                $srcy = 0;
            }
        } else {
            if ($crop) {
                if ($srcwidth >= $srcheight) {
                    $srcx = ($srcwidth  $srcheight) / 2;
                    $srcy = 0;
                    $newwidth = $srcheight;
                    $newheight = $srcheight;
                } else {
                    $srcx = 0;
                    $srcy = ($srcheight  $srcwidth) / 2;
                    $newwidth = $srcwidth;
                    $newheight = $srcwidth;
                }
            } else {
                if ($w/$srcwidth < $h/$srcheight) {
                    $newwidth = $w;
                    $newheight = round($w * $srcheight / $srcwidth);
                    $srcx = 0;
                    $srcy = 0;
                } else {
                    $newwidth = round($h * $srcwidth / $srcheight);
                    $newheight = $h;
                    $srcx = 0;
                    $srcy = 0;
                }
            }
        }
        if ($newwidth % 2) {
            $newwidth;
        }
        if ($newheight % 2) {
            $newheight;
        }
        if (function_exists('imagecreatefromjpeg')) {
            $im = @imagecreatefromjpeg($imgurl);
        } elseif (function_exists('imagecreatefrompng')) {
            $im = @imagecreatefrompng($imgurl);
        } elseif (function_exists('imagecreatefromgif')) {
            $im = @imagecreatefromgif($imgurl);
        } else {
            return false;
        }
        if (!$im) return false;
        $newim = imagecreatetruecolor($newwidth, $newheight);
        imagecopyresampled($newim, $im, 0, 0, $srcx, $srcy, $newwidth, $newheight, $newwidth, $newheight);
        switch ($type) {
            case 'png':
                imagepng($newim, $newimg);
                break;
            case 'gif':
                imagegif($newim, $newimg);
                break;
            default:
                imagejpeg($newim, $newimg, 90);
                break;
        }
        @imagedestroy($im);
        @imagedestroy($newim);
        return true;
    }
}

FAQs(常见问题解答)

1、Q1:为什么升级PHP版本后DEDECMS无法提取缩略图?

A1:这是因为某些PHP函数在不同版本中的行为可能有所不同,fsockopen()函数在PHP 5.6版本中可能会引起问题,可以通过使用stream_socket_client()函数来替代解决。

Q2:如何确保批量提取文章的第一张图片作为缩略图?

A2:可以在后台系统中设置自动摘要分页功能,通过修改dede/inc/inc_archives_functions.php文件,强制在缩略图为空时取第一张图片为缩略图,具体代码如下:

if(!is_file($cfg_basedir.$litpic)) $litpic = $picname;
0