dede织梦如何本地化下载https链接的图片
时间:2022-01-21 21:42:40|来源:网络精心整理
dede织梦如何本地化下载https链接的图片
不只DEDECMS可以用,所有需要图片本地化的程序都可以改。
有些网站针对空referer做了防链接,比如主站域名为www.server110.com,图片子站域名为upload.server110.com。如果在服务器上设置了upload.server110.com上的图片只允许主站的域名www.server110.com访问,这样直接在浏览器里输入图片地址是打不开的,DEDECMS本身的程序当然也是不能下载的,因没没有发送referer。
这个程序要做的就是分析下可能的rerferer值,主要的方法为,先截掉二级域名,取出根域名,再在前面加上www,构造出主站域名,作为referer发送出去。
还有其他的情况就不详细描述了,看代码。
function down_image($url, $filename){ $url = str_ireplace('&', '&', $url); if(get_code($url) != '200'){ preg_match("/://[^.]+.(.*?)//", $url, $preg); $ref = 'https://www.'.$preg[1].'/'; if(get_code($url, $ref) != '200'){ preg_match("/://(.*?)//", $url, $preg); $ref = 'https://'.$preg[1].'/'; if(get_code($url, $ref) != '200'){ return FALSE; } } } $ch = curl_init(); $fp = fopen($filename, 'w'); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_ENCODING, 'none'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"); if(!empty($ref)){ curl_setopt($ch, CURLOPT_REFERER, $ref); } curl_setopt($ch, CURLOPT_FILE, $fp); $img = curl_exec($ch); if($img){ return TRUE; }else{ return FALSE; } } function get_code($url, $ref = ''){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_HEADER,1); curl_setopt($ch, CURLOPT_NOBODY,1); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_TIMEOUT,10); if(!empty($ref)){ curl_setopt($ch, CURLOPT_REFERER, $ref); } curl_exec($ch); $code= curl_getinfo($ch,CURLINFO_HTTP_CODE); curl_close($ch); return $code; }
在dedecms中的修改方法
先把上面的代码添加到include/image.func.php里
然后到admin/inc/inc_archives_functions.php找到下面这行
$rs = $htd->SaveToBin($rndFileName);
替换为
$rs = down_image($value, $rndFileName);
有些网站的服务器不给力,可能会下载失败,再改善下,增加重试
for($i = 0; $i < 5; $i++){
$rs = down_image($value, $rndFileName);
if($rs != FALSE){
break;
}
}
其他的程序修改方法就要自己研究了,函数放在哪里不重要,只要被include就行了,主要是找到下载函数执行的地方。
查看更多与“dede图片”有关的文章
推荐阅读
最近更新
- 01-21dede织梦如何本地化下载https链接的图片
- 01-21主编讲说在使用JSON格式处理数据时应该注意的问题小结
- 01-21优秀技术员详解详解微信小程序实现WebSocket心跳重连
- 01-21高手普及LayUI表格批量删除方法
- 01-21.net非托管资源的回收方法
- 01-21实现oracle数据库字段自增长(两种方式)
- 01-21HTML5之多线程(Web Worker)
- 01-21win32安装配置非安装版的MySQL
- 01-21老牌码农讲说大小不固定的图片、多行文字的水平垂直居中实现方法
- 01-21图文指导固定Table第一行或某几行不随滚动条滚动而滚动