添加到桌面   加入收藏

织梦远程图片遇到Https无法本地化解决教程

08-11 00:57 来源: 编辑:  人气:   点评:评论一下 刷新: 刷新文章

本文为大家介绍一下DEDECMS远程图片遇到Https无法本地化解决办法,由于现在许多网站使用了HTTPS技术,所以我们在DEDE后台发布文章时,可能会遇到对于https的就无法本地化的问题,关于http的远程图片本地化,要想支持HTTPS,其实也非常简单,以下是解决办法:

第一步:

找到dede//inc/inc_archives_functions.php (注:前边红色的dede目录是您的后台目录)

定位到文件里面GetCurContent($body)这个函数

将以下代码:

 

preg_match_all("/src=[\"|’|\s]{0,}(http:\/\/([^>]*)\.(gif|jpg|png|jpeg|bmp))/isU",$body,$img_array);
$img_array = array_unique($img_array[1]);

 

改为:

 

preg_match_all("/src=[\"|’|\s]{0,}(http:\/\/([^>]*)\.(gif|jpg|png|jpeg|bmp))/isU",$body,$img_array);
preg_match_all("/src=[\"|’|\s]{0,}(https:\/\/([^>]*)\.(gif|jpg|png|jpeg|bmp))/isU",$body,$img_array_https);
$img_array = array_unique($img_array[1]); 
$img_array_https = array_unique($img_array_https[1]); 
$img_array=array_merge_recursive($img_array,$img_array_https);

 

第二步:

再找到:

 

if(!preg_match("#^http:\/\/#i", $value))
{
continue;
}

 

改为:

 

if(!preg_match("#^http:\/\/#i", $value)&&!preg_match("#^https:\/\/#i", $value))
{
continue;
}

下面给出修改后的函数:

function GetCurContent($body)
{
    global $cfg_multi_site,$cfg_basehost,$cfg_basedir,$cfg_image_dir,$arcID,$cuserLogin,$dsql;
    $cfg_uploaddir = $cfg_image_dir;
    $htd = new DedeHttpDown();
    $basehost = "http://".$_SERVER["HTTP_HOST"];
    $img_array = array();
    preg_match_all("/src=[\"|'|\s]{0,}(http:\/\/([^>]*)\.(gif|jpg|png))/isU",$body,$img_array);
preg_match_all("/src=[\"|’|\s]{0,}(https:\/\/([^>]*)\.(gif|jpg|png|jpeg|bmp))/isU",$body,$img_array_https);
$img_array = array_unique($img_array[1]); 
$img_array_https = array_unique($img_array_https[1]); 
$img_array=array_merge_recursive($img_array,$img_array_https);
    $img_array = array_unique($img_array[1]);
    $imgUrl = $cfg_uploaddir.'/'.MyDate("ymd", time());
    $imgPath = $cfg_basedir.$imgUrl;
    if(!is_dir($imgPath.'/'))
    {
        MkdirAll($imgPath, $GLOBALS['cfg_dir_purview']);
        CloseFtp();
    }
    $milliSecond = MyDate('His',time());
    foreach($img_array as $key=>$value)
    {
        if(preg_match("#".$basehost."#i", $value))
        {
            continue;
        }
        if($cfg_basehost != $basehost && preg_match("#".$cfg_basehost."#i", $value))
        {
            continue;
        }
if(!preg_match("#^http:\/\/#i", $value)&&!preg_match("#^https:\/\/#i", $value))
{
continue;
}
        $htd->OpenUrl($value);
        $itype = $htd->GetHead("content-type");
        $itype = substr($value, -4, 4);
        if(!preg_match("#\.(jpg|gif|png)#i", $itype))
        {
            if($itype=='image/gif')
            {
                $itype = ".gif";
            }
            else if($itype=='image/png')
            {
                $itype = ".png";
            }
            else
            {
                $itype = '.jpg';
            }
        }
        $milliSecondN = dd2char($milliSecond.mt_rand(1000, 8000));
        $value = trim($value);
        $rndFileName = $imgPath.'/'.$milliSecondN.'-'.$key.$itype;
        $fileurl = $imgUrl.'/'.$milliSecondN.'-'.$key.$itype;
 
        $rs = $htd->SaveToBin($rndFileName);
        if($rs)
        {
$info = '';
$imginfos = GetImageSize($rndFileName, $info);
$fsize = filesize($rndFileName);
//保存图片附件信息
$inquery = "INSERT INTO `dede_uploads`(arcid,title,url,mediatype,width,height,playtime,filesize,uptime,mid)
VALUES ('{$arcID}','$rndFileName','$fileurl','1','{$imginfos[0]}','$imginfos[1]','0','$fsize','".time()."','".$cuserLogin->getUserID()."'); ";
$dsql->ExecuteNoneQuery($inquery);
$fid = $dsql->GetLastID();
AddMyAddon($fid, $fileurl);
            if($cfg_multi_site == 'Y')
            {
                $fileurl = $cfg_basehost.$fileurl;
            }
            $body = str_replace($value, $fileurl, $body);
            @WaterImg($rndFileName, 'down');
        }
    }
    $htd->Close();
    return $body;
}

 

保存文件并上传,这样https的远程图片本地化的问题就解决了!


[提醒] 转载请保留( 飞猪云教程)文章链接,谢谢!对本文有疑问欢迎留言讨论 ( 我有话说)!
元芳,把你的犀利的看法写到这里可好?
  • 全部评论(0
    还没有评论,快来抢沙发吧!