时间: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);