站长收藏详情

帝国CMS远程保存图片功能扩展:没有后缀的图片一样远程保存到本地。

时间:2023-03-18   来源:525游

小伙伴问是不是网上那些通用方法,那些方法我看过也试过,也从原理上分析了,理论上是可行的,但是其实是不可行的。因为一些站点的图片机制是不可控的,所以得用数据流的形式传输,我得确保兼容所有的这种图片方法,所以才写了这篇文章。

测试使用的是帝国CMS7.5版本,文章使用的是今日头条新闻的某篇文章,原文章代码截图如下:(此处注意,测试为今日头条站点文章里的图片获取,其他站点图片URL不一定能获取!所以声明此方法的测试目前只针对今日头条里的图片有效!有需要的小伙伴,可以发我链接测试可以后再决定是否使用!)

2022年12月6日更新支持图片自动加ALT功能!

直接复制到帝国CMS编辑器里,点远程保存图片,图片地址并不能自动保存到本地。

墨鱼经过一番测试和修改以后,再次测试,截图如下:



代码在优化下,让程序自动处理IMG标签里的垃圾代码,更清爽一下:



服务器上自动保存下载完毕:

图片选择器里同步:



当然,同时也关联到帝国CMS的附件表啦:



 

至此,修改完毕。有需要的小伙伴请点下面查看!


 

1.修改文件eclassfunctions.php

找到:

$zz1="/<(img|IMG) (.*?)(src|SRC)=('|"|\\"|)(.+?)(.jpg|.JPG|.gif|.GIF|.png|.PNG|.bmp|.BMP|.jpeg|.JPEG)(.*?)>/is";
$text=preg_replace($zz1,"<\1 \2\3=\4".$exp1."\5\6".$exp2."\7>",$text);

改成:

$zz1="/<(img|IMG) (.*?)(src|SRC)=('|"|\\"|)([^'|"|\\"|]*)('|"|\\"|)(.*?)>/is";
$text=preg_replace($zz1,"<\1 \2\3=\4".$exp1."\5".$exp2."\6\7>",$text);

2.修改文件eclassconnect.php

找到:

$string=ReadFiletext($url);
        if(empty($string))//读取不了
        {
            $r[tran]=0;
            return $r;
        }

改成:

if(!strstr($url,'toutiaoimg'))
    {
        $string=ReadFiletext($url);
        if(empty($string))//读取不了
        {
            $r[tran]=0;
            return $r;
            
        }
    }

继续找到:

WriteFiletext_n($r[yname],$string);

改成:

if(!strstr($url,'toutiaoimg'))
    {
    WriteFiletext_n($r[yname],$string);
    }else{
        $mimes=array( 
            'image/bmp'=>'bmp', 
            'image/gif'=>'gif', 
            'image/jpeg'=>'jpg', 
            'image/png'=>'png', 
            'image/x-icon'=>'ico' 
        ); 
        $value=str_replace('&','',$url);
        $value=str_replace('amp;','&',$value);
        if(($headers=get_headers($value, 1))!==false) 
        {
            $type=$headers['Content-Type']; 
            if(isset($mimes[$type])) 
            {
                $itype=$mimes[$type];
                $string=file_get_contents($value);
                $r[filename] =$r[insertfile].".".$itype;
                $r[yname]=$r[savepath].$r[filename];
                file_put_contents($r[yname],$string);
                $r[url]=$fspath['fileurl'].$filepath.$r[filename];
                $r[type]=1;
                return $r;
            }
        }
    }

搞定!(代码不多,思路值钱,测试了N个小时)

更清爽的图片格式,就是把上面的代码

$text=preg_replace($zz1,"<\1 \2\3=\4".$exp1."\5".$exp2."\6\7>",$text);

改成:

$text=preg_replace($zz1,"<\1 \3=\4".$exp1."\5".$exp2."\6>",$text);

代码里的toutiaoimg是识别码,意思就是比如今日头条里的图片地址里面都有这个字符,我用这个识别就行了,不影响原站功能!

如果保存的时候要保留ALT,可以先按照这个文章https://www.moyublog.com/notes/963.html设置 然后用下面代码

$zz1="/<(img|IMG) (.*?)(alt|ALT)=('|"|\\"|)([^'|"|\\"|]*)('|"|\\"|)(.*?)(src|SRC)=('|"|\\"|)([^'|"|\\"|]*)('|"|\\"|)(.*?)>/is";
$text=preg_replace($zz1,"<\1 \3=\4\5\6 \8=\9".$exp1."\10".$exp2."\11>",$text);

相关阅读

精彩推荐