推荐应用
X2.5幻灯片模块或图片模块调用大图片时出现网页被卡住或空白的解决方法
发布于 2013-01-27
升级到Discuz X2.5后,DIY增加的幻灯片模块或图片模块在处理大图片的帖子时有可能出现网页被卡住或空白的情况,而且不能进入DIY模式,后台更新也无法处理,而 Discuz x2.0 并不存在此问题。科站网很多会员都反馈过出现半截页面下半部分不显示的问题,有些是出现DIY消失,基本都是这个问题导致。
那为什么 Discuz X2.5 会这样呢?而 Discuz X2.0 则不会出现这种情况?克米设计技术人员对这个问题进行了详细的研究和测试!
首先让我们先测试一下为什么会出现这个情况:
我们先在电脑安装一个ComsenzEXP,然后分别安装 Discuz! X2.0 最新版 和 Discuz! X2.5 最新版,并分别上传了同一张相片(大小为1.7M左右),然后分别在 Discuz! X2.0 和 Discuz! X2.5 默认模板下DIY加入 “[内置]帖子图片幻灯片” 样式,并设置好相同的条件,保存后,测试,两个测试站都并没有出现上面所说到的页面被卡住或空白的现象,为什么呢?
因为本地php环境的缓存默认设置比较大,而部分用户购买的虚拟主机缓存设置相对比较小,所以让我们先打开 php.ini 文件,把 memory_limit 改为 32M ,保存后重启一下Apache,然后再DIY更改一下“缩略图宽度”,保存后,刷新页面,Discuz! X2.5 出现了页面被卡住的现象,而 Discuz! X2.0 还正常显示,只是图片显示的为一个红X,但并没有卡住页面,为什么呢?
经排查,是 source\class\class_image.php 的 $im = @$imagecreatefromfunc($this->source); 出现内存溢出;但 Discuz! X2.0 也是使用同样的一个GD库,为什么不会出现这情况呢?
再对比一下 Discuz! X2.0 和 Discuz! X2.5 的文件我们不难发现, Discuz! X2.5 的 source\function\function_block.php 这个文件,出现了一个BUG,在修改 common_block_item 表的图片是否生成了缩图时,"$itemid" 并没有被赋值,代码如下:
下面就分享解决方法一:
打开文件source\function\function_block.php,搜索查找到下面代码:
解决方法二:
打开 php.ini 文件,把 memory_limit 修改大一点,大图片也就能被处理掉了。
综合上面的BUG最好也修改一下,修改后,每次访问都会更新一个图片的缩略图,这样不但页面整体看起来美观,而且对访问的速度也有一定的提高。
那为什么 Discuz X2.5 会这样呢?而 Discuz X2.0 则不会出现这种情况?克米设计技术人员对这个问题进行了详细的研究和测试!
首先让我们先测试一下为什么会出现这个情况:
我们先在电脑安装一个ComsenzEXP,然后分别安装 Discuz! X2.0 最新版 和 Discuz! X2.5 最新版,并分别上传了同一张相片(大小为1.7M左右),然后分别在 Discuz! X2.0 和 Discuz! X2.5 默认模板下DIY加入 “[内置]帖子图片幻灯片” 样式,并设置好相同的条件,保存后,测试,两个测试站都并没有出现上面所说到的页面被卡住或空白的现象,为什么呢?
因为本地php环境的缓存默认设置比较大,而部分用户购买的虚拟主机缓存设置相对比较小,所以让我们先打开 php.ini 文件,把 memory_limit 改为 32M ,保存后重启一下Apache,然后再DIY更改一下“缩略图宽度”,保存后,刷新页面,Discuz! X2.5 出现了页面被卡住的现象,而 Discuz! X2.0 还正常显示,只是图片显示的为一个红X,但并没有卡住页面,为什么呢?
经排查,是 source\class\class_image.php 的 $im = @$imagecreatefromfunc($this->source); 出现内存溢出;但 Discuz! X2.0 也是使用同样的一个GD库,为什么不会出现这情况呢?
再对比一下 Discuz! X2.0 和 Discuz! X2.5 的文件我们不难发现, Discuz! X2.5 的 source\function\function_block.php 这个文件,出现了一个BUG,在修改 common_block_item 表的图片是否生成了缩图时,"$itemid" 并没有被赋值,代码如下:
C::t('common_block_item')->update($itemid, array('makethumb'=>1, 'thumbpath' => $thumbpath));
而 Discuz! X2.0 的这个变量已经被赋值了。下面就分享解决方法一:
打开文件source\function\function_block.php,搜索查找到下面代码:
$rkey = $rpattern = $rvalue = $rtpl = array();
在下面一行加入以下代码即可:$itemid=$blockitem['itemid'];
这样每个图片就只会生成一次缩略图,并作好了标记,就算在生成时内存溢出,下次也会跳过这个图片,所以就不会出现上面所说到的页面被卡住或空白的现象了。解决方法二:
打开 php.ini 文件,把 memory_limit 修改大一点,大图片也就能被处理掉了。
综合上面的BUG最好也修改一下,修改后,每次访问都会更新一个图片的缩略图,这样不但页面整体看起来美观,而且对访问的速度也有一定的提高。