在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;
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1210144.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复