Discuz! X2 一键下载长途图片到当地成果阐明

  以前,用户在论坛中发一些图片,会有一部门是从其它的站点直接复制内容过来,这样复制过来的图片只是一个附件地点,生存在主题和帖子内容中,一旦其它站点开启防盗链或窜改图片附件的文件夹位置,就会造成图片不能正常显示甚至死链。同时对站长本身附件的打点也带来了贫苦,影响网站运行结果。Discuz!X2.0中在编辑器中新增加了一键下载长途图片到当地的成果,一般默认点击“高级”,在“word“下面会有一个按钮,发带有图片地点的主题或帖子时,按下这个按钮,就会把图片下载到当地处事器。下面先容一下这个下载到当地处事器的进程。

  打开文件 source\module\forum\forum_ajax.php,约莫320行:

elseif($_G['gp_action'] == 'downremoteimg') {
$_G['gp_message'] = dstripslashes($_G['gp_message']);
$_G['gp_message'] = str_replace(array("\r", "\n", "\r\n"), '', $_G['gp_message']);
preg_match_all("/\[img\]\s*([^\[\<\r\n]+?)\s*\[\/img\]|\[img=\d{1,4}[x|\,]\d{1,4}\]\s*([^\[\<\r\n]+?)\s*\[\/img\]/is", $_G['gp_message'], $image1, PREG_SET_ORDER);
preg_match_all("/\<img.+src=('|\"|)?(.*)(\\1)([\s].*)?\>/ismUe", $_G['gp_message'], $image2, PREG_SET_ORDER);
$temp = $aids = $existentimg = array();

  这段代码是对内容 $G_[‘gp_message’] 删除由 addslashes() 函数添加的反斜杠,str_replace替换换行符等,即还原文本;preg_match_all 是对文本中图片几种地点举办全局匹配,功效生存在 $image1、$ image2 中,初始化变量。

if(is_array($image1) && !empty($image1)) {
foreach($image1 as $value) {
$temp[] = array(
'0' => $value[0],
'1' => trim(!empty($value[1]) ? $value[1] : $value[2])
);
}
}
if(is_array($image2) && !empty($image2)) {
foreach($image2 as $value) {
$temp[] = array(
'0' => $value[0],
'1' => trim($value[2])
);
}
}
require_once libfile('class/image');

  这段是对匹配后的功效举办遍历赋值,并包括图片处理惩罚类。

if(is_array($temp) && !empty($temp)) {
require_once libfile('class/upload');
$upload = new discuz_upload();
$attachaids = array();
foreach($temp as $value) {
…………………中间略去…………………
if(!@$fp = fopen($attach['target'], 'wb')) {
continue;
} else {
flock($fp, 2);
fwrite($fp, $content);
fclose($fp);
}
if(!$upload->get_image_info($attach['target'])) {
@unlink($attach['target']);
continue;
}

  这一段的目标是对下载下来的附件举办地点、图片信息、缩略图等举办处理惩罚,并写入文件生存,而且判定是不是图片,假如不是,则删除----unlink($attach['target']);。

$attach['size'] = filesize($attach['target']);
$upload->attach = $attach;
$thumb = $width = 0;
if($upload->attach['isimage']) {
…………………中间内容省略………………………
$aids[] = $aid = getattachnewaid();
$setarr = array(//获得图片附件相关信息
'aid' => $aid,
'dateline' => $_G['timestamp'],
'filename' => daddslashes($upload->attach['name']),
'filesize' => $upload->attach['size'],
'attachment' => $upload->attach['attachment'],
'isimage' => $upload->attach['isimage'],
'uid' => $_G['uid'],
'thumb' => $thumb,
'remote' => '0',
'width' => $width
);
DB::insert("forum_attachment_unused", $setarr);//入库
$attachaids[$hash] = $imagereplace['newimageurl'][] = '[attachimg]'.$aid.'[/attachimg]';
} else {
$imagereplace['newimageurl'][] = $attachaids[$hash];
}

  这段是把图片附件的信息举办处理惩罚,通过 getattachnewaid 函数把主题或帖子相关图片信息插入附件表。

if(!empty($aids)) {
require_once libfile('function/post');
ftpupload($aids);
}
$_G['gp_message'] = str_replace($imagereplace['oldimageurl'], $imagereplace['newimageurl'], $_G['gp_message']);
$_G['gp_message'] = addcslashes($_G['gp_message'], '/"\\');
}

  最后这段就是真正把图片附件上传到本身当地处事器,并将文本再 addcslashes 处理惩罚。

Discuz 下载:

Discuz! X2 R20120628 简体GBK下载

Discuz! X2 一键下载远程图片到内地成就阐发

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/10332.html