原来发过一篇supesite前台发文章自动下载远程图片。改动比较少。但维护不方便,发了文章后,光看图片不知道是哪篇文章的:
http://content.predream.cn/?action-viewnews-itemid-10
所以改进了一下,其实也就是在下载图片时把图片的名字带上itemid号码,这样就很好找了。
加上函数:
/** save image保存远程图片 */
$g_ItemID=0;
function get_image_save($mat){
global $g_ItemID;
static $files;
if(!isset($files[$mat[2]])){
$imgurl=$mat[2].'.'.$mat[3];
if(!strstr($mat[2], $GLOBALS['base_url']) && strstr($mat[2], 'http://')){
$maxsize=0;
$showTime=time();
$Nowtime=date('-dhis',$showTime);
$NowMonth=date('m',$showTime);
$NowYear=date('Y',$showTime);
$url_localImg='http://www.mihua.net/attachments/u'.$NowYear.'/'.$NowMonth.'/'.$g_ItemID.$Nowtime.'.'.$mat[3];
$s_dir2= './attachments';
$s_dir3=$s_dir2.'/u'.$NowYear;
$store_dir=$s_dir3.'/'.$NowMonth;
$store_file=$store_dir.'/'.$g_ItemID.$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]];
}
查找并注释掉这一行:
//$_POST['message'] = preg_replace_callback("/src\=(.{2})([^\>\s]{10,105})\.(jpg|gif|png)/i", 'addurlhttp', scensor($_POST['message']));
然后查找 if(!checkperm('allowdirectpost')) {
$itemarr['itemid'] = inserttable('spaceitems', $newsarr, 1);
在后面加上:
//by www.mihua.net // sun
$g_ItemID=$itemarr['itemid'];
$itemarr['message'] = preg_replace_callback("/src\=(.{2})([^\>\s]{10,105})\.(jpg|gif|png|jpeg)/i", 'get_image_save', scensor($itemarr['message']));
好了,前台发一篇文章试试看?