DZ自动上传远程图片如何改成自动上传远程附件,熟悉DZ的高手帮忙一下

时间:2021-09-28 06:02:03
自动上传远程图片PHP代码:
<?
function WaterMark($target){
$watermark_file = './images/common/watermark.gif';
$attachinfo = getimagesize($target);
$watermark_logo = imageCreateFromGIF($watermark_file);
$logo_w = imageSX($watermark_logo);
$logo_h = imageSY($watermark_logo);
$img_w = $attachinfo[0];
$img_h = $attachinfo[1];
$wmwidth = $img_w - $logo_w;
$wmheight = $img_h - $logo_h;
if($attachinfo['mime'] == 'image/gif') {
return true;
}else{
if(is_readable($watermark_file) && $wmwidth > 100 && $wmheight > 100) {
switch ($attachinfo['mime']) {
case 'image/jpeg':
$dst_photo = imageCreateFromJPEG($target);
break;
case 'image/png':
$dst_photo = imageCreateFromPNG($target);
break;
default:
        return true;
}
$x = $img_w - $logo_w-5;//水印位置
$y = $img_h - $logo_h-5;

imageAlphaBlending($watermark_logo, true);
imageCopyMerge($dst_photo, $watermark_logo, $x, $y, 0, 0, $logo_w, $logo_h, 80);//其中值50为水印的透明度
switch($attachinfo['mime']) {
case 'image/jpeg':
imageJPEG($dst_photo, $target);
break;
case 'image/png':
imagePNG($dst_photo, $target);
break;       
}
return true;

}


}
}
function Copyimg($nurl,$tid,$pid,$upflag){
global $db, $tablepre,$attachsave;
 $attachdir='./attachments';
//echo $nurl;
$watermark=1;//是否加水印
$host=array(
1=>'',
2=>'',
3=>''
);
//以上主机下的图片不copy
$upflag=false;
if(!$pid||!$tid)return $nurl;
//$imghost='http://www.In-Sunday.org/';
$ext=strtolower(trim(substr(strrchr($nurl, '.'), 1)));
if(!in_array($ext,array('jpg','gif','jpeg','bmp','png')))return $nurl;
$flag=true;
switch($attachsave) {
case 1: $attach_subdir = 'forumid_'.$GLOBALS['fid']; break;
case 2: $attach_subdir = 'ext_'.$ext; break;
case 3: $attach_subdir = 'month_'.date('ym'); break;
case 4: $attach_subdir = 'day_'.date('ymd'); break;
default:$attach_subdir =Gmdate("y-m",time()+3600*8);break;
}
//$attach_dir = $attachdir.'/'.$attach_subdir;




foreach($host as $key =>$value){
if(strstr ($nurl, $value))$flag=false;

}
if($flag){
@CK_mkdir($attachdir.'/'.$attach_subdir);
$filename= $attach_subdir.'/'.md5(uniqid(microtime(), 1)).'.'.$ext;
//echo $filename;
//return $nurl;
if(@doWriteToimg($attachdir.'/'.$filename,$nurl)){
$upflag=true;
$attachinfo= @getimagesize($attachdir.'/'.$filename);
$dateline=time();
$realname='主题图片'.'.'.$ext;
$filesize=filesize($attachdir.'/'.$filename);
$db->query("INSERT INTO {$tablepre}attachments (tid, pid, dateline, readperm, filename, description, filetype, filesize, attachment, downloads, isimage)
VALUES ('$tid', '$pid', '$dateline', '0', '$realname', '', '$attachinfo[mime]', '$filesize', '$filename', '0', '1')");
$aid = $db->insert_id();
if(in_array($ext,array('jpg','jpeg','png'))&&$watermark)@WaterMark($attachdir.'/'.$filename);
return $aid;
}
return $nurl;
}else{
return $nurl;
}



}
function doWriteToimg ($fileName,$imgurl,$method="w") { 
//echo $nurl;
@chmod($fileName,0777);
if (file_exists($fileName)) {
      return true;
}
$data=ReadImg($imgurl);
if(!$data)return false;
if(!$f=@fopen($fileName,$method))return false;

@flock($f,LOCK_EX);

$fileData=@fwrite($f,$data);

@fclose($f);

return $fileData;
}
function ReadImg($url){
        //echo $url;
        if(!$str=file_get_contents($url)){
                $temp= parse_url($url);        
                $host=$temp[host];
                $port=$temp[port]?$temp[port]:80;
                $referer=$host;        
                $fp = fsockopen($host,$port, $errno, $errstr, 30);
                if (!$fp) {
                   echo "$errstr ($errno)<br />\n";
                } else {
                   $out = "GET ".$url." HTTP/1.1\r\n";
                   $out .= "Host: $host\r\n";
                   $out .= "Referer: $referer\r\n";
                   $out .= "Connection: Close\r\n\r\n";                
                   fputs($fp, $out);
                        while(!feof($fp))
                                {                                        
                                        $temp=fgets($fp,1024);
                                        $str=$str.$temp;
                                        }
                   fclose($fp);
                }                
        }
        return $str;                
}

function Checkimg($str,$tid,$pid){
global $db, $tablepre, $attachsave;
$exp1='[img]';
$exp2='[/img]';
$pre1='[attach]';
$pre2='[/attach]';
$Maxper=20;//限制转换数目$Maxper-1次,防止超时,0不限制
$attid=0; //改变量千万不能修改
//echo $str;
$r = explode ($exp1, $str);
$count=count ($r);
$Loopend=$count<$Maxper?$count:$Maxper;
$text=$r[0];
 for ($i = 1; $i < $Loopend; $i++)
    {
    
     $upflag=false;
      $r1 = explode ($exp2, $r[$i]);
      if ((strstr ($r1[0], 'http://') OR strstr ($r1[0], 'https://')))
      {
        $dourl = $r1[0];
        $nurl=Copyimg($dourl,$tid,$pid,&$upflag);
         if($upflag){
           $text.=$pre1.$nurl.$pre2.$r1[1]; 
           $attid ++;
         }else{
                if($nurl) $text.=$exp1.$nurl.$exp2.$r1[1]; 
         }
      }else{
        $text.=$exp1.$r1[0].$exp2.$r1[1]; 
      }
}
for($i=$Loopend;$i<$count;$i++){
  $r1 = explode ($exp2, $r[$i]);
 $text.=$exp1.$r1[0].$exp2.$r1[1]; 

}

if($attid){
$db->query("update {$tablepre}posts set message='$text',attachment=attachment+$attid where pid='$pid'", 'UNBUFFERED');
$db->query("UPDATE {$tablepre}threads SET  attachment='1'  WHERE tid='$tid'", 'UNBUFFERED');
}
return $text;
}
function CK_mkdir($htmldir){

if (file_exists($htmldir)) {

      return;

} else {

   @mkdir($htmldir,0777);

  @fclose(fopen($htmldir.'/index.htm', 'w'));

}

return;



}
?>

if(!in_array($ext,array('jpg','gif','jpeg','bmp','png')))return $nurl;在此处加入要上传的附件扩展名,比如torrent后虽然可以上传但是以图片形式上传的,会出现红X!!!   




改成自动上传附件后,这一块的又应该怎么改
$message = preg_replace('/\[attachimg\](\d+)\[\/attachimg\]/is', '[attach]\1[/attach]', $message);
                if($imagecopy){
                $message=@Checkimg($message,$tid,$pid);                
                }


小弟是完全菜鸟,高手大哥帮帮忙谢谢了

4 个解决方案

#1


兄弟帮你踩下,爱莫能助哦!


圣诞节到了,大家快来许个愿吧.博主在此欢迎你们的光临!
圣诞版许愿墙来啰!没有人回复好伤心哦. 


圣诞节到了,大家快来许个愿吧.博主在此欢迎你们的光临!昵友们,一起许个愿祝福他们!  大家都去许个愿,因些版本正在测试中,有较多缺点,请大家指正,如果有高级美工设计师,请帮忙给处理下美工,让我们心中的他或她幸福吧!

祝福地址:http://www.itgoto.com.cn/bbs
如果你有兴趣也可以在我的博客里面留言哦.记得我哦.祝福你们想要祝福的人吧.愿他/她们都美好!

博客地址:http://www.itgoto.com.cn/

论坛地址:http://www.itgoto.com.cn/bbs

大家要多多支持哦,顺便点点广告哦.有交换链接的请Q我.329071213

#2


高手指教了,谢谢

#3


麻烦知道的解答一下,谢谢

#4


高手大哥帮帮忙谢谢了

#1


兄弟帮你踩下,爱莫能助哦!


圣诞节到了,大家快来许个愿吧.博主在此欢迎你们的光临!
圣诞版许愿墙来啰!没有人回复好伤心哦. 


圣诞节到了,大家快来许个愿吧.博主在此欢迎你们的光临!昵友们,一起许个愿祝福他们!  大家都去许个愿,因些版本正在测试中,有较多缺点,请大家指正,如果有高级美工设计师,请帮忙给处理下美工,让我们心中的他或她幸福吧!

祝福地址:http://www.itgoto.com.cn/bbs
如果你有兴趣也可以在我的博客里面留言哦.记得我哦.祝福你们想要祝福的人吧.愿他/她们都美好!

博客地址:http://www.itgoto.com.cn/

论坛地址:http://www.itgoto.com.cn/bbs

大家要多多支持哦,顺便点点广告哦.有交换链接的请Q我.329071213

#2


高手指教了,谢谢

#3


麻烦知道的解答一下,谢谢

#4


高手大哥帮帮忙谢谢了