<?php
/* *******************      自定义函数  ****************** */

/*  --【【*】】   获取网址中的域名   【【*】】--   */
function get_host( $url )
{
 $arr = explode( "/", $url );
 return $arr[2];
}


/*  --【【*】】   获取文件扩展名,返回不带.   【【*】】--   */
function get_file_ext( $filepath, $ext="." )
{
 //$filetype = strtolower(substr($filepath, (strrpos($filepath, $ext)+1), strlen($filepath)-strrpos($filepath, $ext)));
 $filetype = strtolower( substr( $filepath, strrpos( $filepath, $ext )+1 ) );
 return $filetype;
}


/*  --【【*】】   判断客户端浏览器   【【*】】--   */
function get_client_browser()
{
 $sys = $_SERVER['HTTP_USER_AGENT'];
 if(stripos($sys, "NetCaptor") > 0)
  $be = "NetCaptor";
 elseif(stripos($sys, "Firefox/") > 0)
 {
  preg_match("/Firefox\/([^;)]+)+/i", $sys, $b);
  $be = "Mozilla Firefox ".$b[1];
 }
 elseif(stripos($sys, "MAXTHON") > 0)
 {
  preg_match("/MAXTHON\s+([^;)]+)+/i", $sys, $b);
  preg_match("/MSIE\s+([^;)]+)+/i", $sys, $ie);
  $be = $b[0]." (IE".$ie[1].")";
 }
 elseif(stripos($sys, "MSIE") > 0)
 {
  preg_match("/MSIE\s+([^;)]+)+/i", $sys, $ie);
  $be = "Internet Explorer ".$ie[1];
 }
 elseif(stripos($sys, "Netscape") > 0)
  $be = "Netscape";
 elseif(stripos($sys, "Opera") > 0)
  $be = "Opera";
 elseif( preg_match("/Chrome/i", $sys) )
  $be = "Google";
 else
  $be = "Unknow_Broswer";
 
 return $be;
}

 

/* **************************************************** */
/* **                                                ** */
/* **                  字符串等操作                  ** */
/* **                                                ** */
/* **************************************************** */

/*  --【【*】】   计算字符长度,无论英文或汉字都当作一个长度   【【*】】--   */
function str_len( $str )
{
 $i = 0;
 $count = 0;
 $len = strlen ($str);
 while( $i<$len )
 {
  $chr = ord ( $str[$i] );
  $count++;
  $i++;
  if($i >= $len) break;
  if($chr & 0x80)
  {
   $chr <<= 1;
   while( $chr & 0x80 )
   {
    $i++;
    $chr <<= 1;
   }
  }
 }
 return $count;
}


/*  --【【*】】   中文字符截取   【【*】】--   */
//如果php.ini 有打开  ;extension=php_mbstring.dll 的话 使用 mb_substr( $str, start, leng, "gbk" );
//否则使用自定义函数
/* utf8、gbk 都支持的汉字截取函数   c_substr(字符串, 开始位置, 截取长度, 编码, 最后是否显示...);
   编码默认为 gbk , 开始位置默认为 0 
*/
//$str 需要转换的字符串,  $start 开始位置,  $length 截取长度,  $charset 编码格式,  $suffix 截断显示字符...
function c_substr($str, $start=0, $length, $suffix=true, $charset="utf-8" )
{
 $strlen = str_len( $str );
 if(function_exists("mb_substr"))
 {
  if( $suffix && $length<$strlen )
   return mb_substr($str, $start, $length, $charset)." ...";
  else
   return mb_substr($str, $start, $length, $charset);
 }
 elseif(function_exists("iconv_substr"))
 {
  if( $suffix && $length<$strlen )
   return iconv_substr($str,$start,$length,$charset)." ...";
  else
   return iconv_substr($str,$start,$length,$charset);
 }
 else
 {
  $re['utf-8']  = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
  $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
  $re['gbk']    = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
  $re['big5']   = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
  preg_match_all($re[$charset], $str, $match);
  $slice = join("",array_slice($match[0], $start, $length));
  if( $suffix && $length<$strlen ) 
   return $slice." ...";
  else
   return $slice;
 }
}


/*  --【【*】】   检测字符串类型   【【*】】--   */
//通过返回字符判断类型
function str_type( $str )
{
    $a=preg_match('/['.chr(0xa1).'-'.chr(0xff).']/', $str); //匹配汉字
    $b=preg_match('/[0-9]/', $str); //匹配数字
    $c=preg_match('/[a-zA-Z]/', $str); //匹配英文
    
 if($a && $b && $c)
  return "a"; //汉字数字英文的混合字符串
    elseif($a && $b && !$c)
  return "b"; //汉字数字的混合字符串
    elseif($a && !$b && $c)
  return "c"; //汉字英文的混合字符串
    elseif(!$a && $b && $c)
  return "d"; //数字英文的混合字符串
    elseif($a && !$b && !$c)
  return "e"; //纯汉字
    elseif(!$a && $b && !$c)
  return "f"; //纯数字
    elseif(!$a && !$b && $c)
  return "g"; //纯英文
    else
  return "h"; //特殊字符
}


/* **************************************************** */
/* **                                                ** */
/* **              特殊字符转换、过滤等              ** */
/* **                                                ** */
/* **************************************************** */

/*  --【【*】】   把input, textarea中的\n转换为<br>, " "转换为&nbsp;   【【*】】--   */
function conv_html( $text )
{
 $text=nl2br($text); 
 $text=str_replace(" ", "&nbsp;", $text);
 return $text;
}


/*  --【【*】】   转码特殊字符   【【*】】--   */
function sp_str( $text )
{
 $text = trim( $text ); //去掉首尾空白
 //转码 ! " ' ( ) / ; < > = [ ] \ { } 以后,很多标签都可以不转码
 $text=str_replace('#', '&#035;',$text);
 $text=htmlspecialchars( $text );  //将 < > & " 保持原义
 $text=str_replace("'", '&#039;',$text);
 $text=str_replace('=', '&#061;',$text);
 $text=str_replace('\\', '&#092;',$text);
 return $text;
}

/*  --【【*】】   让在线编辑器正常输出 html标签(代码)   【【*】】--   */
function sp_input( $text )
{
 if (!get_magic_quotes_gpc())
  $text = addslashes($text);
 $text = trim( $text ); //去掉首尾空白
 return htmlspecialchars($text);  //转义html标签,< > & " 保持原义
}

/*  --【【*】】   去掉字符串中包含的任何 HTML 及 PHP 的标记   【【*】】--   */
function no_tag( $text )
{
 return strip_tags($text); 
}

/*  --【【*】】 去掉由addslashes函数添加的\  【【*】】--   */
function output( $txt )
{
 return stripslashes( $txt );
}

/*  --【【*】】 去掉超链接\  【【*】】--   */
function remove_a( $txt )
{
 $txt = stripslashes( $txt );
 preg_match_all( '/<a(.*?)href=["|\'](.*?)["|\'](.*?)>(.*?)<\/a>/i', $txt, $a_arr );
 foreach( $a_arr[0] as $akey => $avalue )
 {
  $txt = str_replace( $avalue, $a_arr[4][$akey], $txt );
 }
 return $txt;
}

/* **************************************************** */
/* **                                                ** */
/* **              数组操作等                        ** */
/* **                                                ** */
/* **************************************************** */

/*  --【【*】】   删除数组空白元素   【【*】】--   */
function remove_empty_array(& $arr, $trim=true) //$arr是数组,$trim是否去掉前后空白
{
 foreach ($arr as $key => $value) 
 {
  if (is_array($value)) 
   array_remove_empty($arr[$key]); 
  else 
  {
   if ($trim)
    $value = trim($value);
   if ($value == "")
    unset($arr[$key]);   
  } 
 }   
 return $arr;
}


/*  --【【*】】   去除一维数组的重复元素   【【*】】--   */
function array_distinct( $arr )
{
  $tmp_arr=array();
  $arr_sum = count( $arr );
  for($i=0; $i<$arr_sum; $i++)
  {
   if( in_array($arr[$i],$tmp_arr) ) 
    array_splice( $arr, $i, 1 );
   else
    $tmp_arr[] = $arr[$i];
  }
  return $arr;
}


/*  --【【*】】   查找纯二维数组中值,返回键   【【*】】--   */
//返回一个一维数组,[0],[1]的值,分别是原二维数组的一维和二维键名
function arr_search( $str, $arr)
{
  foreach( $arr as $k => $value )
  {
   $tmp_arr = array();
   if( $key=array_search($str, $value) )
   {
    $tmp_arr[] = $k;
    $tmp_arr[] = $key;
    break;
   }
  }
  return $tmp_arr;
}

/**
 * 对二维数组进行排序
 * @param $array
 * @param $keyid 排序的键值
 * @param $order 排序方式 'asc':升序 'desc':降序
 * @param $type  键值类型 'number':数字 'string':字符串
 */
function sort2array(&$array, $keyid, $order = 'asc', $type = 'number')
{
    if (is_array($array)) 
    {
        foreach($array as $val) 
        {
            $order_arr[] = $val[$keyid];
        }
        $order = ($order == 'asc') ? SORT_ASC: SORT_DESC;
        $type = ($type == 'number') ? SORT_NUMERIC: SORT_STRING;
        array_multisort($order_arr, $order, $type, $array);
    }
    return $array;
}


/* **************************************************** */
/* **                                                ** */
/* **              图片截取,生成缩略图              ** */
/* **                                                ** */
/* **************************************************** */

/*  --【【*】】   保存远程图片到本地,用于图片已知的图片   【【*】】--   */
//目标字符,保存路径,生成缩略图,生成长,生成宽
//返回一个数组 info
//数组键名:save_name, thumb_name
function get_remote_img( $url, $save_dir, $thumb=false, $width=0, $height=0 ) 
{
 set_time_limit(0); 
 $url = stripslashes($url);  //删除由 addslashes() 函数添加的反斜杠
 if( !file_exists($save_dir) ) 
  mkdir($save_dir,0777); 
 
 $code = date( "YmdHis" );
 
 $host = get_host( $url );
 $local_host = $_SERVER['HTTP_HOST']; //本地域名
 
 $info = array();
 if( $host!=$local_host )
 {
  $ext = get_file_ext( $url );
  $new_name = $code."_".mt_rand( 1000, 9999 ).".".$ext;
  
  if( substr($save_dir, -1, 1)!='/' )
   $save_dir = $save_dir."/";
  $save = $save_dir.$new_name; 
  
  $get_file = file_get_contents( $url );
  if( $get_file ) 
  { 
   $fp = fopen( $save, "w+" ); 
   fwrite( $fp, $get_file ); 
   fclose( $fp );
   chmod($save, 0777 );
   $thumb_name = "";
   if( $thumb && $width && $height )
   {
    $thumb_name = $new_name."_thumb.".$ext;
    small_pic( $save, $save_dir.$thumb_name, $width, $height );
    chmod($save_dir.$thumb_name, 0777 );
   }
   
   $info = array( "save_name" => $new_name, "thumb_name" => $thumb_name );
  }
 }
 return $info;
}

 

/*  --【【*】】   保存远程图片到本地,用于发表文章时  【【*】】--   */
//文章内容,保存路径
//返回替换后的文章内容
function get_remote_img2( $content, $save_dir )
{
 set_time_limit(0);
 $content = stripslashes( $content ); //删除由 addslashes() 函数添加的反斜杠
 $img_array = array(); 
 preg_match_all("/(src|SRC)=[\"|'| ]{0,}(http:\/\/(.*)\.(gif|jpg|jpeg|bmp|png))/isU", $content, $img_array); 
 $img_array = array_unique( $img_array[2] ); 
 
 $root = __ROOT__."/";
 if( substr($save_dir, -1, 1)!='/' )
  $save_dir = $save_dir."/";
 $imgUrl = $root.$save_dir; //替换路径
 $imgPath = $save_dir;//保存路径
 if( !is_dir($imgPath) )
  @mkdir( $imgPath, 0777 ); 
 
 $rename = date( "YmdHis" );
 
 $local_host = $_SERVER['HTTP_HOST']; //本地域名
 foreach($img_array as $key =>$value) 
 { 
  $value = trim( $value ); 
  $host = get_host( $value ); //获取图片的域名地址
  if( $host!=$local_host )
  {
   $ext = get_file_ext( $value );//图片扩展名
   $get_file = @file_get_contents( $value );
   $rand = mt_rand( 1000, 9999 );
   $fileurl = $imgUrl.$rename."_".$rand.".".$ext; //文章替换路径
   $saveFileName = $imgPath.$rename."_".$rand.".".$ext; //图片保存路径
   
   if( $get_file ) 
   { 
    $fp = @fopen( $saveFileName, "w" ); 
    @fwrite( $fp, $get_file ); 
    @fclose( $fp ); 
    $content = str_replace( $value, $fileurl, $content);//把远程网址替换成本地网址
   }
  }
 }
 return $content; //返回替换后的内容
}

 

/*  --【【*】】   此函数生成的缩略图是以设定的宽,与原图成比例生成   【【*】】--   */
function small_pic($srcFile, $toFile, $toW, $toH)  // 变量分别为:文件路径,输出路径,生成宽,生成高
{
 if($toFile==""){ $toFile = $srcFile; }
 $info = "";
 $data = getimagesize($srcFile,$info);
 switch ($data[2])
 {
  case 1:
  {
   if(!function_exists("imagecreatefromgif")){
    echo "你的GD库不能使用GIF格式的图片,请使用Jpeg或PNG格式!<a href='javascript:go(-1);'>返回</a>";
    exit();
   }
   $im = imagecreatefromgif($srcFile);
   break;
  }
  case 2:
  {
   if(!function_exists("imagecreatefromjpeg")){
    echo "你的GD库不能使用jpeg格式的图片,请使用其它格式的图片!<a href='javascript:go(-1);'>返回</a>";
    exit();
   }
   $im = imagecreatefromjpeg($srcFile);   
   break;
  }
  case 3:
  {
   if(!function_exists("imagecreatefrompng")){
    echo "你的GD库不能使用png格式的图片,请使用其它格式的图片!<a href='javascript:go(-1);'>返回</a>";
    exit();
   }
   $im = imagecreatefrompng($srcFile); 
   break;
  }
 }
 $srcW=imagesx($im);
 $srcH=imagesy($im);
 // -------------------------------- 如果图片长宽都小于目标大小的话,用原大小 --------------------
 if( $srcW<$toW && $srcH<$toH )
 {
  copy($srcFile, $toFile);
  imagedestroy($im);
  return true;
 }
 // -----------------
 $toWH=$toW/$toH;
 $srcWH=$srcW/$srcH;
 if($toWH<=$srcWH)
 {
  $ftoW=$toW;
  $ftoH=$ftoW*($srcH/$srcW);
 }
 else
 {
  $ftoH=$toH;
  $ftoW=$ftoH*($srcW/$srcH);
 }   
 if($srcW>$toW||$srcH>$toH)
 {
  @$ni = imagecreatetruecolor($ftoW,$ftoH);
  switch ($data[2])
  {
   case 1:
   {
    $alpha=imagecolorallocate($ni,255,255,255);
    imagecolortransparent($ni,$alpha);
    imagefill($ni,0,0,$alpha);
    imagecopyresampled($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH);
    imagegif($ni,$toFile);
    break;
   }
   case 2:
   {
    imagecopyresampled($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH);
    imagejpeg($ni,$toFile);
    break;
   }
   case 3:
   {
    $alpha = imagecolorallocatealpha($ni, 0 , 0 , 0 , 127);
    imagefill($ni, 0, 0, $alpha);
    imagecopyresampled($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH);
    imagesavealpha($ni, true);
    imagepng($ni,$toFile);
    break;
   }
  }
  imagedestroy($ni);
 }
 imagedestroy($im);
}

/*  --【【*】】   按要求裁剪图片,按照原图片比例,从中间开始   【【*】】--   */
function photo_cut($img_src, $to_src, $width, $height, $grade=100)  //$img_src 原图, $to_src 生成图路径 ,$width  定义宽 ,$height 定义高 ,图片质量
{
 $filetype = strtolower(substr ( $img_src , strrpos( $img_src , ".") , strlen($img_src)-strrpos( $img_src , ".")));
 if( $filetype==".jpg" or $filetype==".jpeg" )
  $temp_img = imagecreatefromjpeg($img_src); 
 elseif( $filetype==".png" )
  $temp_img = imagecreatefrompng($img_src); 
 elseif( $filetype==".gif" )
  $temp_img = imagecreatefromgif($img_src); 
 
 $o_width  = imagesx($temp_img);  //取得原图宽 
 $o_height = imagesy($temp_img);   //取得原图高 
 
 //判断处理方法 
 if($width>$o_width || $height>$o_height)  //原图宽或高比规定的尺寸小,进行压缩 
 {
  $newwidth=$o_width; 
    $newheight=$o_height; 

    if($o_width>$width)
    { 
      $newwidth=$width; 
      $newheight=$o_height*$width/$o_width; 
    } 

    if($newheight>$height)
    { 
      $newwidth=$newwidth*$height/$newheight; 
      $newheight=$height; 
    } 

    //缩略图片 
    $new_img = imagecreatetruecolor($newwidth, $newheight); 
    imagecopyresampled($new_img, $temp_img, 0, 0, 0, 0, $newwidth, $newheight, $o_width, $o_height);
    
    if( $filetype==".jpg" || $filetype==".jpeg" )
   imagejpeg($new_img , $to_src, $grade);   //$grade为图片质量
  elseif( $filetype==".png" )
   imagepng($new_img , $to_src); 
  elseif( $filetype==".gif" )
   imagegif($new_img , $to_src); 
    
    imagedestroy($new_img);  
 }
 
 else //原图宽与高都比规定尺寸大,进行压缩后裁剪 
 {
  if($o_height*$width/$o_width>$height)   //先确定width与规定相同,如果height比规定大,则ok 
   {
    $newwidth=$width; 
    $newheight=$o_height*$width/$o_width; 
    $x=0; 
    $y=($newheight-$height)/2; 
   }
   else       //否则确定height与规定相同,width自适应 
   {
    $newwidth=$o_width*$height/$o_height; 
    $newheight=$height; 
    $x=($newwidth-$width)/2; 
    $y=0; 
   } 

   //缩略图片 
   $new_img = imagecreatetruecolor($newwidth, $newheight); 
   imagecopyresampled($new_img, $temp_img, 0, 0, 0, 0, $newwidth, $newheight, $o_width, $o_height);
   if( $filetype==".jpg" or $filetype==".jpeg" )
   {
   imagejpeg($new_img , $to_src, $grade);                 
   imagedestroy($new_img); 
   
   $temp_img = imagecreatefromjpeg($to_src); 
   $o_width  = imagesx($temp_img); //取得缩略图宽 
   $o_height = imagesy($temp_img);  //取得缩略图高 

   //裁剪图片 
   $new_imgx = imagecreatetruecolor($width,$height); 
   imagecopyresampled($new_imgx,$temp_img,0,0,$x,$y,$width,$height,$width,$height); 
   imagejpeg($new_imgx , $to_src, $grade); 
   imagedestroy($new_imgx);
   }
   elseif( $filetype==".png" )
   {
   imagepng($new_img , $to_src);                 
   imagedestroy($new_img); 
   
   $temp_img = imagecreatefrompng($to_src); 
   $o_width  = imagesx($temp_img); //取得缩略图宽 
   $o_height = imagesy($temp_img);  //取得缩略图高 

   //裁剪图片 
   $new_imgx = imagecreatetruecolor($width,$height); 
   imagecopyresampled($new_imgx,$temp_img,0,0,$x,$y,$width,$height,$width,$height); 
   imagepng($new_imgx , $to_src); 
   imagedestroy($new_imgx);
   }
   elseif( $filetype==".gif" )
   {
   imagegif($new_img , $to_src);                 
   imagedestroy($new_img); 
   
   $temp_img = imagecreatefromgif($to_src); 
   $o_width  = imagesx($temp_img); //取得缩略图宽 
   $o_height = imagesy($temp_img);  //取得缩略图高 

   //裁剪图片 
   $new_imgx = imagecreatetruecolor($width,$height); 
   imagecopyresampled($new_imgx,$temp_img,0,0,$x,$y,$width,$height,$width,$height); 
   imagegif($new_imgx , $to_src); 
   imagedestroy($new_imgx);
   }
 }

/*  --【【*】】   按图片原始比例缩小图片,由座标(0,0)开始,支持透明png和gif   【【*】】--   */
function my_image_size($img_src, $to_src , $new_width , $new_height) 
{
    if($new_width <1 || $new_height <1) 
    {
        echo "请输入有效的像素 !";
        exit();
    }
    if(!file_exists($img_src)) 
    {
        echo $img_src . " 不存在 !";
        exit();
    }
    // 图像类型
    $filetype = strtolower(substr ( $img_src , strrpos( $img_src , ".") , strlen($img_src)-strrpos( $img_src , ".")));
    if( $filetype==".jpg" || $filetype==".jpeg" )
        $type=IMAGETYPE_JPEG;
    elseif( $filetype==".png" )
        $type=IMAGETYPE_PNG;
    elseif( $filetype==".gif" )
        $type=IMAGETYPE_GIF;
        
    $support_type=array(IMAGETYPE_JPEG , IMAGETYPE_PNG , IMAGETYPE_GIF);
    if(!in_array($type, $support_type,true)) 
    {
        echo "不支持 jpg,gif,png 以外的图片格式";
        exit();
    }
    //Load image
    switch($type) 
    {
        case IMAGETYPE_JPEG :
        $src_img=imagecreatefromjpeg($img_src);
        break;
        case IMAGETYPE_PNG :
        $src_img=imagecreatefrompng($img_src);
        break;
        case IMAGETYPE_GIF :
        $src_img=imagecreatefromgif($img_src);
        break;
        default:
        echo "载入图片出错!";
        exit();
    }
    $w=imagesx($src_img);
    $h=imagesy($src_img);
    
    $inter_w = ($new_width > $w) ? $w : $new_width;
    $inter_h = ($new_height > $h) ? $h : $new_height;

    $new_img=imagecreatetruecolor($inter_w,$inter_w);
        
    /* --- 用以处理缩放png图透明背景变黑色问题 开始 --- */
    if( $filetype==".png" || $filetype==".gif" )
    {
        $color = imagecolorallocate($new_img,255,255,255);
        imagecolortransparent($new_img,$color);
        imagefill($new_img,0,0,$color);
    }
    /* --- 用以处理缩放png图透明背景变黑色问题 结束 --- */

    imagecopyresampled($new_img,$src_img,0,0,0,0,$new_width,$new_height,$w,$h);
    switch($type) 
    {
        case IMAGETYPE_JPEG :
        imagejpeg($new_img, $to_src,100); // 存储图像
        break;
        case IMAGETYPE_PNG :
        imagepng($new_img,$to_src);
        break;
        case IMAGETYPE_GIF :
        imagegif($new_img,$to_src);
        break;
    }
}


/*  --【【*】】   按图片原始比例缩小,会对空白地方填充满,可不保存生成的图片   【【*】】--   */
function img_resize( $srcFile, $toFile='', $toW, $toH, $issave=true, $cfg_ddimg_bgcolor = 0 )//源文件,生成文件,生成宽,生成高,是否保存, 填充颜色
{
 //$cfg_ddimg_bgcolor = 0;//背景填充颜色,0为白色,1为黑色
 if($toFile=='') $toFile = $srcFile;
 $info = '';
 $srcInfo = getimagesize($srcFile,$info);
 switch ($srcInfo[2])
 {
  case 1:
   $img = imagecreatefromgif($srcFile);
   break;
  case 2:
   $img = imagecreatefromjpeg($srcFile);
   break;
  case 3:
   $img = imagecreatefrompng($srcFile);
   break;
  case 6:
   $img = imagecreatefromwbmp($srcFile);
   break;
 }

 $width = imageSX($img);
 $height = imageSY($img);

 if (!$width || !$height) {
  return false;
 }

 $target_width = $toW;
 $target_height = $toH;
 $target_ratio = $target_width / $target_height;

 $img_ratio = $width / $height;

 if ($target_ratio > $img_ratio) {
  $new_height = $target_height;
  $new_width = $img_ratio * $target_height;
 } else {
  $new_height = $target_width / $img_ratio;
  $new_width = $target_width;
 }

 if ($new_height > $target_height) {
  $new_height = $target_height;
 }
 if ($new_width > $target_width) {
  $new_height = $target_width;
 }

 $new_img = ImageCreateTrueColor($target_width, $target_height);
 
 if($cfg_ddimg_bgcolor==0) $bgcolor = ImageColorAllocate($new_img, 0xff, 0xff, 0xff);
 else $bgcolor = 0;
 
 if (!@imagefilledrectangle($new_img, 0, 0, $target_width-1, $target_height-1, $bgcolor))
 {
  return false;
 }

 if (!@imagecopyresampled($new_img, $img, ($target_width-$new_width)/2, ($target_height-$new_height)/2, 0, 0, $new_width, $new_height, $width, $height))
 {
  return false;
 }
 
 //保存为目标文件
 if($issave)
 {
  switch ($srcInfo[2])
  {
   case 1:
    imagegif($new_img, $toFile);
    break;
   case 2:
    imagejpeg($new_img, $toFile,100);
    break;
   case 3:
    imagepng($new_img, $toFile);
    break;
   case 6:
    imagebmp($new_img, $toFile);
    break;
   default:
    return false;
  }
 }
 //不保存
 else
 {
  switch ($srcInfo[2])
  {
   case 1:
    imagegif($new_img);
    break;
   case 2:
    imagejpeg($new_img);
    break;
   case 3:
    imagepng($new_img);
    break;
   case 6:
    imagebmp($new_img);
    break;
   default:
    return false;
  }
 }
 imagedestroy($new_img);
 imagedestroy($img);
 return true;
}


/*  --【【*】】   加水印函数   【【*】】--   */
/*参数表
$groundImage  源图
$gWaterPos   水印位置 0:随机 1:顶端居左 2:顶端居中 3:顶端居右 4:中部居左 5:中部居中 6:中部居右 7:底端居左 8:底端居中 9:底端居右
$gWaterMarkType  text:用字符串作水印 img:用图片作水印
$gWaterImg   作为水印的图片,支持GIF,JPG,PNG格式
$gWaterText   水印字符串内容 支持中文
$gWaterFontSize  字体大小,如100
$gWaterTextColor 字体颜色,如#FF0000
$gWaterTtfFile  'STCAIYUN.TTF'; //ttf文件,可从C:\WINDOWS\Fonts得到
*/
//生成水印
function imageWaterMark( $groundImage, $gWaterPos, $gWaterMarkType, $gWaterImg, $gWaterText, $gWaterFontSize, $gWaterTextColor, $gWaterTtfFile ) 
{
 //读取水印文件
 if($gWaterMarkType == 'img'){
   if(!empty($gWaterImg) && file_exists($gWaterImg)) {
  $water_info = getimagesize($gWaterImg);
  $water_w = $water_info[0];//取得水印图片的宽
  $water_h = $water_info[1];//取得水印图片的高
  switch($water_info[2]) {
    case 1:$water_im = imagecreatefromgif($gWaterImg);break;
    case 2:$water_im = imagecreatefromjpeg($gWaterImg);break;
    case 3:$water_im = imagecreatefrompng($gWaterImg);break;
    default:die($formatMsg);
  }
   }else{
  return array(false,'作为水印的图片不存在!');
   }
 }
 //读取背景图片
 if(!empty($groundImage) && file_exists($groundImage)) {
   $ground_info = getimagesize($groundImage);
   $ground_w = $ground_info[0];//取得背景图片的宽
   $ground_h = $ground_info[1];//取得背景图片的高
   switch($ground_info[2]) {
  case 1:$ground_im = imagecreatefromgif($groundImage);break;
  case 2:$ground_im = imagecreatefromjpeg($groundImage);break;
  case 3:$ground_im = imagecreatefrompng($groundImage);break;
  default:die($formatMsg);
   }
 }else{
   return array(false,'需要加水印的图片不存在!');
 }
 //水印位置
 if($gWaterMarkType == 'img') {
   $w = $water_w;
   $h = $water_h;
 }else{
   $temp = imagettfbbox(ceil($gWaterFontSize),0,$gWaterTtfFile,$gWaterText);//取得使用 TrueType 字体的文本的范围
   $w = $temp[2] - $temp[6];
   $h = $temp[3] - $temp[7];
   unset($temp);
 }
 if($ground_w < $w || $ground_h < $h) {
   return array(false,'需要加水印的图片的长度或宽度比水印本身还小,无法生成水印!');
 }
 switch($gWaterPos) {
   case 0://随机
  $posX = rand(0,($ground_w - $w));
  $posY = rand(0,($ground_h - $h));
  break;
   case 1://1为顶端居左
  $posX = 0;
  $posY = 0;
  break;
   case 2://2为顶端居中
  $posX = ($ground_w - $w) / 2;
  $posY = 0;
  break;
   case 3://3为顶端居右
  $posX = $ground_w - $w;
  $posY = 0;
  break;
   case 4://4为中部居左
  $posX = 0;
  $posY = ($ground_h - $h) / 2;
  break;
   case 5://5为中部居中
  $posX = ($ground_w - $w) / 2;
  $posY = ($ground_h - $h) / 2;
  break;
   case 6://6为中部居右
  $posX = $ground_w - $w;
  $posY = ($ground_h - $h) / 2;
  break;
   case 7://7为底端居左
  $posX = 0+5;
  $posY = $ground_h - $h - 5;
  break;
   case 8://8为底端居中
  $posX = ($ground_w - $w) / 2;
  $posY = $ground_h - $h;
  break;
   case 9://9为底端居右
  $posX = $ground_w - $w;
  $posY = $ground_h - $h;
  break;
   default://随机
  $posX = rand(0,($ground_w - $w));
  $posY = rand(0,($ground_h - $h));
  break;
 }
 //设定图像的混色模式
 imagealphablending($ground_im, true);
 if($gWaterMarkType == 'img'){//图片水印
   imagecopymerge_alpha($ground_im, $water_im, $posX, $posY, 0, 0, $water_w,$water_h, 100);//拷贝水印到目标文件
 }else{//文字水印
   if(!empty($gWaterTextColor) && (strlen($gWaterTextColor)==7) ) {
  $R = hexdec(substr($gWaterTextColor,1,2));
  $G = hexdec(substr($gWaterTextColor,3,2));
  $B = hexdec(substr($gWaterTextColor,5));
   }else{
  return array(false,'水印文字颜色格式不正确!');
   }
   imagettftext($ground_im,$gWaterFontSize,0,$posX,$posY,imagecolorallocate($ground_im,$R,$G,$B),$gWaterTtfFile, iconv("GB2312","UTF-8",$gWaterText));
 }
 //生成水印后的图片
 @unlink($groundImage);
 switch($ground_info[2]) {
   case 1:imagegif($ground_im,$groundImage);break;
   case 2:imagejpeg($ground_im,$groundImage, 100);break;
   case 3:imagepng($ground_im,$groundImage);break;
   default:return array(false,'图片格式不支持水印');
 }
 //释放内存
 if(isset($water_info)){
   unset($water_info);
 }
 if(isset($water_im)){
   imagedestroy($water_im);
 }
 unset($ground_info);
 imagedestroy($ground_im);
 return true;
}

function imagecopymerge_alpha( $dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct)
{
        $opacity=$pct;
        // getting the watermark width
        $w = imagesx($src_im);
        // getting the watermark height
        $h = imagesy($src_im);

        // creating a cut resource
        $cut = imagecreatetruecolor($src_w, $src_h);
        // copying that section of the background to the cut
        imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h);
        // inverting the opacity
        //$opacity = 100 - $opacity;

        // placing the watermark now
        imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h);
        imagecopymerge($dst_im, $cut, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $opacity);
}


/**
* 为图片添加水印,支持透明图片,防止透明图片背景变黑
* @static public
* @param string    $source 原文件名
* @param string    $water  水印图片
* @param string    $savename  添加水印后的图片名
* @param string    $alpha  水印的透明度,100不透明
* @param int       $w_pos  水印位置 0:随机 1:顶端居左 2:顶端居中 3:顶端居右 4:中部居左 5:中部居中 6:中部居右 7:底端居左 8:底端居中 9:底端居右
* @return void
*/
function water( $source, $water, $savename=null, $alpha=80, $w_pos=9 )
{
    //检查文件是否存在
    if (!file_exists($source) || !file_exists($water))
        return false;

    //图片信息
    $sInfo = getImageInfo($source);
    $wInfo = getImageInfo($water);

    //如果图片小于水印图片,不生成图片
    if ($sInfo["width"] < $wInfo["width"] || $sInfo['height'] < $wInfo['height'])
        return false;

    //建立图像
    $sCreateFun = "imagecreatefrom" . $sInfo['type'];
    $sImage = $sCreateFun($source);

    $wCreateFun = "imagecreatefrom" . $wInfo['type'];
    $wImage = $wCreateFun($water); //$wImage

    //2.拾取一个完全透明的颜色,最后一个参数127为全透明
    $color_s=imagecolorallocatealpha($sImage,255,255,255,127);
    $color_w=imagecolorallocatealpha($wImage,255,255,255,127);  

    //3.设置透明 
    imagecolortransparent($sImage,$color_s); 
    imagecolortransparent($wImage,$color_w);

    imagefill($sImage,0,0,$color_s); 
    imagefill($wImage,0,0,$color_w); 

    //设定图像的混色模式
    imagealphablending($sImage, true);
    imagealphablending($wImage, true);

    //imageAlphaBlending($wImage, false);
    //imageSaveAlpha($wImage, true);
    //图像位置,默认为右下角右对齐
    //$posY = $sInfo["height"] - $wInfo["height"];
    //$posX = $sInfo["width"] - $wInfo["width"];
    switch($w_pos) 
    {
        case 1:
          $wx = 5;
          $wy = 5;
          break;
        case 2:
          $wx = ($sInfo["width"] - $wInfo["width"]) / 2;
          $wy = 0;
          break;
        case 3:
          $wx = $sInfo["width"] - $wInfo["width"];
          $wy = 0;
          break;
        case 4:
          $wx = 0;
          $wy = ($sInfo["height"] - $wInfo["height"]) / 2;
          break;
        case 5:
          $wx = ($sInfo["width"] - $wInfo["width"]) / 2;
          $wy = ($sInfo["height"] - $wInfo["height"]) / 2;
          break;
        case 6:
          $wx = $sInfo["width"] - $wInfo["width"];
       $wy = ($sInfo["height"] - $wInfo["height"]) / 2;
          break;
        case 7:
          $wx = 0;
          $wy = $sInfo["height"] - $wInfo["height"];
          break;
        case 8:
          $wx = ($sInfo["width"] - $wInfo["width"]) / 2;
          $wy = $sInfo["height"] - $wInfo["height"];
          break;
        case 9:
          $wx = $sInfo["width"] - $wInfo["width"];
          $wy = $sInfo["height"] - $wInfo["height"];
          break;
        case 10:
          $wx = rand(0,($sInfo["width"] - $wInfo["width"]));
          $wy = rand(0,($sInfo["height"] - $wInfo["height"]));
          break;       
        default:
          $wx = $sInfo["width"] - $wInfo["width"];
          $wy = $sInfo["height"] - $wInfo["height"];
          break;
    }


    //生成混合图像
    imagecopymerge($sImage, $wImage, $wx, $wy, 0, 0, $wInfo['width'], $wInfo['height'], $alpha);

    //输出图像
    $ImageFun = 'Image' . $sInfo['type'];
    //如果没有给出保存文件名,默认为原图像名
    if (!$savename) {
        $savename = $source;
        @unlink($source);
    }
    //保存图像
    $ImageFun($sImage, $savename);
    imagedestroy($sImage);
}
//取得图片信息
function getImageInfo( $img ) 
{
    $imageInfo = getimagesize($img);
    if ($imageInfo !== false) {
        $imageType = strtolower(substr(image_type_to_extension($imageInfo[2]), 1));
        $imageSize = filesize($img);
        $info = array(
            "width" => $imageInfo[0],
            "height" => $imageInfo[1],
            "type" => $imageType,
            "size" => $imageSize,
            "mime" => $imageInfo['mime']
        );
        return $info;
    } else {
        return false;
    }
}


/*  --【【*】】   生成图片,例如把随机码生成图片   【【*】】--   */
//$string 字符 
//$pwidth 图片宽, $pheight 图片高
//$todir 图片生成目录
//$tofilename 图片生成名称
//注意字体文件路径
function creat_img( $string, $pwidth=55, $pheight=25, $todir, $tofilename  )
{
 $width = $pwidth; //验证码图片的宽度 
    $height = $pheight; //验证码图片的高度 
   
    $im = imagecreate($width,$height); 
    //背景色 
    $back = imagecolorallocate($im,255,255,255); 
    //模糊点颜色 
    $pix = imagecolorallocate($im,172,214,255); 
    //字体色 
    $font = imagecolorallocate($im,55,55,85); 
    //绘模糊作用的点 
    for($i=0;$i<1000;$i++) 
    { 
        imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$pix); 
    } 
    //imagestring($im, 8, 7, 5,$string, $font ); 
 imagettftext( $im,12,0,7,16,$font,"Public/images/tahoma.ttf",$string ); //注意字体文件路径

    imagerectangle($im,0,0,$width-1,$height-1,$font); 
 imagepng($im, $todir.$tofilename); 
    imagedestroy($im); 
}

//生成圈形透明的png图片
function yuanImg( $src, $tofile=null ) 
{
    $src_img = imagecreatefromstring(file_get_contents($src));
    $w = imagesx($src_img);
    $h = imagesy($src_img);
    $w = min($w, $h);
    $h = $w;
    $img = imagecreatetruecolor($w, $h);
    imagesavealpha($img, true);//这一句一定要有
    $bg = imagecolorallocatealpha($img, 255, 255, 255, 127);//拾取一个完全透明的颜色,最后一个参数127为全透明
    imagefill($img, 0, 0, $bg);
    $r = $w / 2; //圆半径
    $y_x = $r; //圆心X坐标
    $y_y = $r; //圆心Y坐标
    for ($x = 0; $x < $w; $x++) {
        for ($y = 0; $y < $h; $y++) {
            $rgbColor = imagecolorat($src_img, $x, $y);
            if (((($x - $r) * ($x - $r) + ($y - $r) * ($y - $r)) < ($r * $r))) {
                imagesetpixel($img, $x, $y, $rgbColor);
            }
        }
    }
    /**
     * 如果想要直接输出图片,应该先设header。header("Content-Type: image/png; charset=utf-8");
     * 并且去掉缓存区函数
     */
    //获取输出缓存,否则imagepng会把图片输出到浏览器
    ob_start();
    imagepng($img);
    imagedestroy($img);
    $contents = ob_get_contents();
    ob_end_clean();
    
    if( $tofile )
     file_put_contents( $tofile, $contents );
    else
     return $contents;//返回png图片数据流
}

 

/* **************************************************** */
/* **                                                ** */
/* **                目录遍历部分                    ** */
/* **                                                ** */
/* **************************************************** */

/*  --【【*】】   此函数读出目标目录下的所有文件名称,包括下级目录   【【*】】--   */
function get_all_files( $path )
{
    $list = array();
    foreach( glob( $path . '/*') as $item )
 {
        if( is_dir( $item ) )
  {
   $list = array_merge( $list , get_all_files( $item ) );
        }
        else
  {
   $list[] = $item;
        }
    }
    return $list;
}


/* **************************************************** */
/* **                                                ** */
/* **                获取随机码                      ** */
/* **                                                ** */
/* **************************************************** */

/*  --【【*】】   生成算术验证码   【【*】】--   */
function math_verify()
{
 $str = "+-*";   
 $x=mt_rand(0, 2);
 $z=substr($str, $x, 1);  //获得符运算符
 
 switch($z)
 {
  case '*':
  {
   $x=mt_rand(1, 10); //获得第一个随机数
   $y=mt_rand(1, 10); //获得第一个随机数
   $verify=$x."×".$y;  //构成表达式
   $verify2=$x.$z.$y;
  } break;
  
  case '-':
  {
   $x=mt_rand(1, 20); //获得第一个随机数
   $y=mt_rand(1, 20); //获得第一个随机数
   //把大数值赋给X,小值赋给Y
   $max=$x>$y?$x:$y; 
   $min=$x<$y?$x:$y;
   $x=$max;
   $y=$min;
   $verify=$x."-".$y;  //构成表达式
   $verify2=$x.$z.$y;
  } break;
  
  default:
  {
   $x=mt_rand(1, 50); //获得第一个随机数
   $y=mt_rand(1, 50); //获得第一个随机数
   $verify=$x."+".$y;  //构成表达式
   $verify2=$x.$z.$y;
  } break;
 }
 eval("\$rs=$verify2;"); //获得结果,把结果值赋予$rs;
 $s = new Session();
 $s -> set("verify", md5($rs));
 
 return $verify;
}

/**
 * 产生一个指定长度的随机字符串,并返回给用户 
 * @param type $len 产生字符串的长度
 * @return string 随机字符串
 */
function genRandomString($len = 6) {
    $chars = array(
        "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
        "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
        "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G",
        "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
        "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2",
        "3", "4", "5", "6", "7", "8", "9"
    );
    $charsLen = count($chars) - 1;
    // 将数组打乱 
    shuffle($chars);
    $output = "";
    for ($i = 0; $i < $len; $i++) {
        $output .= $chars[mt_rand(0, $charsLen)];
    }
    return $output;
}

/*
函数:remote_file_exists
功能:判断远程文件是否存在
参数: $url_file - 远程文件URL
返回:存在返回true,不存在或者其他原因返回false
*/
function remote_file_exists( $url_file )
{
 //检测输入
 $url_file = trim($url_file);
 if (empty($url_file)) { return false; }
 $url_arr = parse_url($url_file);
 if (!is_array($url_arr) || empty($url_arr)){ return false; }
 
 //获取请求数据
 $host = $url_arr['host'];
 $path = $url_arr['path'] ."?". $url_arr['query'];
 $port = isset($url_arr['port']) ? $url_arr['port'] : "80";
 
 //连接服务器
 $fp = fsockopen($host, $port, $err_no, $err_str, 30);
 if (!$fp){ return false; }
 
 //构造请求协议
 $request_str = "GET ".$path." HTTP/1.1\r\n";
 $request_str .= "Host: ".$host."\r\n";
 $request_str .= "Connection: Close\r\n\r\n";
 
 //发送请求
 fwrite($fp, $request_str);
 $first_header = fgets($fp, 1024);
 fclose($fp);
 
 //判断文件是否存在
 if (trim($first_header) == ""){ return false; }
 if (!preg_match("/200/", $first_header))
 {
  return false;
 }
 return true;
}


//获取上传文件大小限制
//返回以Byte为单位的大小数值,例如2097152,即2MB
function get_upload_file_size_limit()
{
 $post_max_size = ini_get( "post_max_size" ); //获取php中POST给PHP的所能接收的最大值
 $unit = strtoupper( substr( $post_max_size, -1 ) ); //获取单位K,M,G
 $multiplier = ($unit == 'M' ? 1048576 : ($unit == 'K' ? 1024 : ($unit == 'G' ? 1073741824 : 1))); //获取大小倍数
 $post_max_size =  substr( $post_max_size, 0, strrpos( $post_max_size, $unit ) ) * $multiplier;
 
 $upload_max_filesize = ini_get( "upload_max_filesize" ); //获取允许上传文件大小的最大值
 $unit = strtoupper( substr( $upload_max_filesize, -1 ) ); //获取单位K,M,G
 $multiplier = ($unit == 'M' ? 1048576 : ($unit == 'K' ? 1024 : ($unit == 'G' ? 1073741824 : 1))); //获取大小倍数
 $upload_max_filesize =  substr( $upload_max_filesize, 0, strrpos( $upload_max_filesize, $unit ) ) * $multiplier;
 
 $memory_limit = ini_get( "memory_limit" ); //获取允许上传文件大小的最大值
 $unit = strtoupper( substr( $memory_limit, -1 ) ); //获取单位K,M,G
 $multiplier = ($unit == 'M' ? 1048576 : ($unit == 'K' ? 1024 : ($unit == 'G' ? 1073741824 : 1))); //获取大小倍数
 $memory_limit =  substr( $memory_limit, 0, strrpos( $memory_limit, $unit ) ) * $multiplier;
 
 return ( $min = $post_max_size < $upload_max_filesize ? $post_max_size : $upload_max_filesize ) < $memory_limit ? $min : $memory_limit;
}


//时间戳转账周几
function timetoweek($time)
{
 $week = array( 0=>"日", 1=>"一", 2=>"二", 3=>"三", 4=>"四", 5=>"五", 6=>"六" );
 $d = date("w", $time);
 return $week[$d];
}

/**
 * 模拟post进行url请求
 * @param string $url
 * @param array $post_data
 */
function php_post( $url, $post_data='', $header=null, $timeout=30 )
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    if (preg_match ("/https/i", $url))
    { 
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 信任任何证书
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); // 检查证书中是否设置域名
    } 
    curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0(for zyAdam)');
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
    curl_setopt($curl, CURLOPT_REFERER, "http://adamf15");
    if( $header )
        curl_setopt( $curl, CURLOPT_HTTPHEADER, $header );
    if($post_data) 
    {
        curl_setopt($curl, CURLOPT_POST, 1);
        if( is_array($post_data) )
            curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post_data));
        else
            curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
    }
    curl_setopt($curl, CURLOPT_COOKIE, "PHPSESSID=".session_id());//传递SESSIONID
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);//超时时间
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $data = curl_exec($curl);
    if (curl_errno($curl)) 
    {
        //return curl_error($curl);
        return false;
    }
    curl_close($curl);
    
    return $data;
}

/** 
* @creator Jimmy 
* @data 2018/1/05 
* @desc 数据导出到excel(csv文件) 
* @param $filename 导出的csv文件名称 如'test-'.date("Y年m月j日").'.csv'
* @param array $tileArray 所有列名称 
* @param array $dataArray 所有列数据 
*/
function writeToCsv( $filename, $header=array(), $datas=array() )
{  
    $fp = fopen( $filename,'w' );
    fwrite( $fp, chr(0xEF).chr(0xBB).chr(0xBF) );//转码 防止乱码(比如微信昵称(乱七八糟的))  
    fputcsv( $fp, $header );
    foreach( $datas as $data ) 
    {  
        fputcsv( $fp, $data );  
    }
    fclose( $fp );
}

//10进制转62进制
function to62($num)
{
    $to = 62;
    $dict = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $ret = '';
    do {
        $ret = $dict[bcmod($num, $to)] . $ret; //bcmod取得高精确度数字的余数。
        $num = bcdiv($num, $to);  //bcdiv将二个高精确度数字相除。
    } while ($num > 0);
    return $ret;
}

//62进制转10进制
function to10($str)
{
    $from = 62;
    $str = strval($str);
    $dict = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $len = strlen($str);
    $dec = 0;
    for($i = 0; $i < $len; $i++) {
        $pos = strpos($dict, $str[$i]);
        $dec = bcadd(bcmul(bcpow($from, $len - $i - 1), $pos), $dec);
    }
    return $dec;
}

/* *******************      自定义函数 END ****************** */
?>

点赞(0)
发表
评论
返回
顶部