saber 酱的抱枕

Fly me to the moon

11/29
2017
学习

PHP缓冲区问题导致的dedecms异常

最近服务器上迁移过来了一些网站(后台是DEDECMS),今天遇到了两个因为PHP缓冲区导致的图像损坏问题。

1.验证码无法显示

这个验证码在原本的服务器上是正常的,到了新服务器上却无法显示了。

对于这个问题,我们可以修改dedecms的文件去除验证码,但是这个办法治标不治本。正确的处理办法是在include文件夹的vdimgck.php里加一句ob_end_clean();函数来解决。

在输出图片前先清除缓存区。这个问题的原因就是缓冲区异常导致图片前面多了一些字符,图片就无法正常解析了。

2.图片集上传图片异常

上传图片后弹窗提示“FILDID:1”这样的文字,之后图片预览图处显示了一个error图片。但是我到服务器上看到文件明明是传上去了。其实问题的原因和上面一样,是图片前多了一些字符。

那么解决办法也是类似的,打开/dede/swfupload.php,在两个地方分别添加ob_end_clean();:

1.查找

echo "FILEID:".$_SESSION['fileid'];

在前面添加ob_end_clean();

2.查找

header('Content-type: image/jpeg');

有两个结果,在第一个前面添加ob_end_clean();

其实这个文件里dedecms原本就有两处ob_end_clean();,但是为了解决这个问题我们需要在不同位置再添加两处ob_end_clean();。

PHP缓冲区问题导致的dedecms异常