帝国CMS7.5实现远程保存没有后缀的图片数据方式

帝国CMS有个远程保存图片功能,但是无法保存无后缀的图片,

首先我们需要修改e\functions.php文件中的函数RepImg函数让它可以匹配到图片地址,

具体实现如下:

function RepImg($text,$copyflash){
    global $ecms_config;
    $exp1="";
    $exp2="";
    //去掉图片链接
    if($ecms_config['sets']['saveurlimgclearurl']==1)
    {
        $zz2="/\<(a|A) (.*?)(href|Href)=('|\"|\\\\\"|)(.+?)><(img|IMG) (.*?)(src|SRC)=('|\"|\\\\\"|)(.+?)(\\9)(.*?)><\/(a|A)>/is";
        $text=preg_replace($zz2,"<\\6 \\7\\8=\\9\\10\\11\\12>",$text);
    }
    //修改匹配正则让它满足匹配无后缀的图片
    $zz1="/\<(img|IMG) (.*?)(src|SRC)=('|\"|\\\\\"|)(.+?)(\\4)(.*?)>/is";
    $text=preg_replace($zz1,"<\\1 \\2\\3=\\4".$exp1."\\5".$exp2."\\6\\7>",$text);
    return $text;
}

然后找到e/connet.php远程保存函数DoTranUrl添加实现通过获取到的数据获取后缀的代码

//帝国实现的是通过.分割确定后缀的,对于没有后缀的就会分割到域名上
        //一般后缀名大于5肯定是有问题
	    if(strlen($r['filetype'])>5){
            $r['filetype']='.'.getFileExt(getFileMIME($string));
        }

image.png

然后我们需要在userfun.php定义如下函数用于通过文件数据获取后缀名字

// 读取文件获取MIME_TYPE
function getFileMIME($str)
{
    $strInfo = @unpack("C4chars", $str);
    $typeCode = dechex($strInfo ['chars1']) .
        dechex($strInfo ['chars2']) .
        dechex($strInfo ['chars3']) .
        dechex($strInfo ['chars4']); //把十进制转换为十六进制。

    switch ($typeCode) //硬编码值查表
    {
        case "ffd8ffe0" :
        case "ffd8ffe1" :
        case "ffd8ffe2" :
            $type = 'image/jpeg; charset=binary';
            break;
        case "89504e47" :
            $type = 'image/png; charset=binary';
            break;
        case "47494638" :
            $type = 'image/gif; charset=binary';
            break;
        case "504B0304" :
            $type = 'application/zip; charset=binary';
            break;
        case "25504446" :
            $type = 'application/pdf; charset=binary';
            break;
        case "5A5753" :
            $type = 'application/swf; charset=binary';
            break;
        case "3c3f786d" :
            $type = 'application/xml; charset=binary';
            break;
        case "3c68746d" :
            $type = 'application/html; charset=binary';
            break;
        case "0000" :
            $type = 'text/plain; charset=binary';
            break;
        case "2166756e" :
            $type = 'application/x-javascript; charset=binary';
            break;

        default :
            $type = 'application/octet-stream; charset=binary';
            break;
    }
    return $type;
}

// 获取文件扩展名
function getFileExt($type) {
    switch ($type) {
        case "image/jpeg; charset=binary" :
            //$extType = "jpeg|jpg|jpe";
            $extType = "jpg";
            break;
        case "image/png; charset=binary" :
            $extType = "png";
            break;
        case "image/gif; charset=binary" :
            $extType = "gif";
            break;
        case "application/zip; charset=binary" :
            $extType = "zip";
            break;
        case "application/pdf; charset=binary" :
            $extType = "pdf";
            break;
        case "application/swf; charset=binary" :
            $extType = "swf";
            break;
        case "application/xml; charset=binary" :
            $extType = "xml";
            break;
        case "application/html; charset=binary" :
            $extType = "html";
            break;
        case "text/plain; charset=binary" :
            $extType = "txt";
            break;
        case "application/x-javascript; charset=binary" :
            $extType = "js";
            break;
        default :
            $extType = "type_error";
            break;
    }
    return $extType;
}


支付宝扫码打赏 微信扫码打赏

如果本文对你有帮助,欢迎打赏本站

喜欢 ()or分享