Discuz X 升级到2.5后,DIY增加的幻灯片模块或图片模块在处理大图片的帖子时有可能出现网页被卡住或空白的情况,而且不能进入DIY模式,后台更新也无法处理,而 Discuz x2.0 并不存在此问题;
同时也有很多网友在 Discuz 官方发帖咨询了这个问题,但 Discuz 官方的人一直以用户模板问题为由,一直不关注这个BUG;
曾经我们的客户也找过 Discuz 的官方技术看过,都说是用户模板的问题;也有网友用 Discuz 官方默认模板也出现这个情况,这样就可以证明不是 Discuz 技术所说的是用户模板的问题了;
那为什么 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最好也修改一下,修改后,每次访问都会更新一个图片的缩略图,这样不但页面整体看起来美观,而且对访问的速度也有一定的提高;