为了造福喜欢做伪原创的各大站长,经常crtl+c和crtl+V的supesite爱好者。
遂决定小小的改造一下前台发贴的功能,自动下载远程图片本地化。(以后会根据需要进行更新。米花网sun)修改如下:
在source目录的cp_news.php文件查找 (约70行左右)
$_POST['message'] = preg_replace_callback("/src\=(.{2})([^\>\s]{10,105})\.(jpg|gif|png)/i", 'addurlhttp', scensor($_POST['message']));
替换为:
$_POST['message'] = preg_replace_callback("/src\=(.{2})([^\>\s]{10,105})\.(jpg|gif|png)/i", 'get_image_save', scensor($_POST['message']));
然后在文件头部加入以下代码。
$funcFile='./function/common.func.php';
include_once($funcFile);
/** save image保存远程图片 */
function get_image_save($mat){
static $files;
if(!isset($files[$mat[2]])){
$imgurl=$mat[2].'.'.$mat[3];
if(!strstr($mat[2], 'www.mihua.net') && strstr($mat[2], 'http://')){
$maxsize=0;
$showTime=time();
$Nowtime=date('d-his',$showTime);
$NowMonth=date('m',$showTime);
$NowYear=date('Y',$showTime);
$url_localImg='/info/attachments/u'.$NowYear.'/'.$NowMonth.'/'.$Nowtime.'.'.$mat[3];
$s_dir2= './attachments';
$s_dir3=$s_dir2.'/u'.$NowYear;
$store_dir=$s_dir3.'/'.$NowMonth;
$store_file=$store_dir.'/'.$Nowtime.'.'.$mat[3];
$content = sreadfile($imgurl, 'rb', 1, $maxsize);
if(!empty($content))
{
if (!file_exists($store_dir)){
//$msg=$msg.' not exist:'.$store_dir;
if (!file_exists($s_dir2)) mkdir($s_dir2,0777);
if (!file_exists($s_dir3)) mkdir($s_dir3,0777);
if (!file_exists($store_dir))
mkdir($store_dir,0777);
}
if (file_exists($store_dir))
file_put_contents($store_file,$content);
}
//else $msg=$msg.' get remote img failed!';
return 'src=\"'.$url_localImg;
}else{
$files[$mat[2]] = $mat[0];
return 'src=\"'.$imgurl;
}
}
return $files[$mat[2]];
}
保存后试试吧,应该还有bug,比如远程图片链接没有以http开头的话就下载不了,还有附件路径不会保存到数据库,文件多了就会难以维护。本地保存的图片暂不能加图片水印。图片的路径在程序里面写死了,改动不是很方便。后台admin编辑的时候也不会下载远程图片,还要在别的地方改,似乎不在cp_news.php这个文件。
欢迎大家拍砖,提供修改意见。或者自己修改完善后告知我一下下。