在使用Discuz!论坛系统时,您可能会遇到一个问题:当使用IE内核浏览器上传图片后,缩略图显示为“xx”。这一问题主要出现在HTTPS环境下,与图片输出的Content-Type设置有关。本文将详细介绍如何解决这一问题,并优化代码以支持多种图片格式。
首先,问题的根本原因在于论坛系统中forum_image.php文件的第59行左右,代码中仅设置了通用的“image”类型,而未明确指定具体的图片格式(如JPEG或PNG)。这会导致某些浏览器无法正确解析图片内容。

dheader('Content-Type: image');
    

为了修复这一问题,我们需要明确指定Content-Type为具体的图片格式,例如:

dheader('Content-Type: image/jpeg');
    

然而,上述修改并不完美,因为它仅支持JPEG格式,而无法处理PNG等其他格式的图片。因此,我们需要进一步优化代码,添加一个函数来动态检测图片的MIME类型。
以下是改进后的代码示例:

function get_image_extension($image){
    $extension = pathinfo($filename, PATHINFO_EXTENSION);
    if(in_array($extension, ['jpg', 'jpeg', 'png', 'gif', 'bmp'])){
        return 'image/' . $extension;
    }
    return 'image';
}
    

通过以上函数,我们可以根据图片的实际扩展名返回正确的MIME类型。接下来,在forum_image.php文件中调用此函数以设置正确的Content-Type:

if($img->Thumb($filename, $thumbfile, $w, $h, $type)) {
    if($nocache) {
        dheader('Content-Type: ' . get_image_extension($filename));
        @readfile($_G['setting']['attachdir'].$thumbfile);
    }
}
    

这样,无论是JPEG、PNG还是其他支持的图片格式,都能被正确识别并显示。这一改动不仅解决了HTTPS环境下的图片显示问题,还提升了系统的兼容性和用户体验。
总结来说,针对Discuz!论坛系统在HTTPS环境下图片显示异常的问题,我们可以通过明确指定Content-Type以及动态检测图片MIME类型的方式来彻底解决。希望本文对您有所帮助!
如果您还有其他关于Discuz!系统的问题,欢迎随时提问!