my_function
/**
 * Function class 
 * Hz xs 函数库
 */
header('Content-type:text/html;Charset=utf-8');

/**
 * 1. 函数名 -- 函数用途
 * 2. 参数 -- 参数说明
 * 3. 返回值 -- 返回说明
 * 4. demo -- 函数用法
 */



// 1. encryptDecrypt($key,$string,$decrypt)       PHP加密解密---使用了base64和MD5加密和解密
// 2. generateRandomString($len)                        PHP生成随机字符串
// 3. getExtension($filename)                              PHP获取(绝对路径)文件扩展名(后缀)
// * 18. retrieve($url)                                        php url(http)获取文件名 -- 正则匹配
// * 19. getExt($url)                                          php获取文件扩展名 
// 4. formatSize($size)                                        PHP获取文件大小并格式化
// 5. stringParser($string,$replace_array)          PHP替换标签字符
// 6. listDirFiles($DirPath)                              PHP列出目录下的文件名
// 7. curPageURL()                                              PHP获取当前页面URL
// 8. download($filename)                                    PHP强制下载文件
// 9. cutStr()                                                    PHP截取字符串长度
// 10. getIp()                                                    PHP获取客户端真实IP
// 11. injCheck($sql_str)                                    PHP防止SQL注入
// 12. message($msgTitle,$message,$jumpUrl)          PHP页面提示与跳转
// 13. changeTimeType($seconds)                            PHP计算时长
// 14. logResult($str='')                                    PHP写日志
// 15. getthemonth($date)                                    PHP获取当前月份第一天和最后一天
// 16. visit($url)                                              PHP检查是否宕机
// 17. highlighter($text, $words)                        PHP搜索和高亮显示字符串中的关键字
// 20. ajaxReturn($info,$status = 0,$data = null)                     php AJAX返回json数据
// 21. imgSetWord($pic,$word,$font,$size,$x,$y,$newpic='',$print=0)   php图片设置文字水印
// 22. scanDirs($dir,$filter=array())           PHP扫描目录(过滤指定目录/文件),返回目录/文件 数组
// 23. getFiles($path)                          PHP获取目录下的文件和目录(一级)
// 24. copyDir($strSrcDir, $strDstDir)          PHP复制目录
// 25. delDir($path)                            PHP删除目录级目录下文件
// 26. handle_isolation_str_to_arr($str,$delimiter)     将一个字符串通过一个特定的分割符拆分成多个字符串
// 27. curl_get($api)                           curl接口调用【get】
// 28. curl_post($api,$data)                    curl接口调用【post】
// 
// 
// 


if (!function_exists('encryptDecrypt')) {
  /**
   * 1. PHP加密解密---使用了base64和MD5加密和解密
   * PHP加密和解密函数可以用来加密一些有用的字符串存放在数据库里,并且通过可逆解密字符串
   * @param  [type] $key     [ 处理字串的类型 ]
   * @param  [type] $string  [ 需要加密的字串 ]
   * @param  [type] $decrypt [ 0 加密, 1 解密 ]
   * @return [type]          [ 字符串 ]
   *
   * demo
   * 
   * 以下是将字符串“Helloweba欢迎您”分别加密和解密
   * 加密:
   * echo encryptDecrypt('password', 'Helloweba欢迎您',0);
   * 解密:
   * echo encryptDecrypt('password', 'z0JAx4qMwcF+db5TNbp/xwdUM84snRsXvvpXuaCa4Bk=',1);
   */
  function encryptDecrypt($key, $string, $decrypt){
      if($decrypt){
          $decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "12");
          return $decrypted;
      }else{
          $encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));
          return $encrypted;
      }
  }
}


if (!function_exists('generateRandomString')) {
  /**
   * 2. PHP生成随机字符串
   * @param  integer $length [ 生成字符串长度 ,不填默认为10 ]
   * @return [type]          [ 返回一个指定长度的随机字符串 ]
   *
   * demo
   * generateRandomString(5);
   */
  function generateRandomString($length = 10) {
      $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
      $randomString = '';
      for ($i = 0; $i < $length; $i++) {
          $randomString .= $characters[rand(0, strlen($characters) - 1)];
      }
      return $randomString;
  }
}

if (!function_exists('getExtension')) {
  /**
   * 3. PHP获取文件扩展名(后缀)
   * @param  [type] $filename [指定文件名]
   * @return [type]           [返回文件后缀(.)之后文件类型]
   *
   * demo
   * $filename = '我的文档.doc'; 
   * echo getExtension($filename);
   * 
   */
  function getExtension($filename){
    $myext = substr($filename, strrpos($filename, '.'));
    return str_replace('.','',$myext);
  }
}


if (!function_exists('formatSize')) {
  /**
   * 4. PHP获取文件大小并格式化
   * @param  [type] $size [ 文件大小 ]
   * @return [type]       [ 文件大小单位转换 ]
   *
   * demo
   * $thefile = filesize('test_file.mp3'); 
   * echo formatSize($thefile);
   */
  function formatSize($size) {
      $sizes = array(" Bytes", " KB", " MB", " GB", " TB", " PB", " EB", " ZB", " YB");
      if ($size == 0) { 
          return('n/a'); 
      } else {
        return (round($size/pow(1024, ($i = floor(log($size, 1024)))), 2) . $sizes[$i]); 
      }
  }
}


if (!function_exists('stringParser')) {
  /**
   * 5. PHP替换标签字符 -- 有时我们需要将字符串、模板标签替换成指定的内容
   * @param  [type] $string   [ 带有自定义模板的字串 ]
   * @param  [type] $replacer [ 自定义模板替换对应数组 ]
   * @return [type]           [ 返回替换之后的函数 ]
   *
   * demo
   *
   * $string = 'The {b}anchor text{/b} is the {b}actual word{/b} or words used {br}to describe the link {br}itself'; 
   * $replace_array = array('{b}' => '<b>','{/b}' => '</b>','{br}' => '<br />'); 
   *
   * echo stringParser($string,$replace_array);
   */
  function stringParser($string,$replacer){
      $result = str_replace(array_keys($replacer), array_values($replacer),$string);
      return $result;
  }
}


if (!function_exists('listDirFiles')) {
  /**
   * 6. PHP列出目录下的文件名
   * @param  [type] $DirPath [ 检索的文件目录 ]
   * @return [type]          [ 返回指定目录下的文件名(不包含目录) ]
   *
   * demo
   * 
   * listDirFiles('D:/phpStudy/WWW/other/');
   */
  function listDirFiles($DirPath){
      if($dir = opendir($DirPath)){
           while(($file = readdir($dir))!== false){
                  if(!is_dir($DirPath.$file))
                  {
                      echo "filename: $file<br />";
                  }
           }
      }
  }
}

if (!function_exists('curPageURL')) {
  /**
   * 7. PHP获取当前页面URL
   * @return [type] [ 返回访问当前页的url ]
   *
   * demo
   *
   * echo curPageURL();
   */
  function curPageURL() {
      $pageURL = 'http';
      if (!empty($_SERVER['HTTPS'])) {$pageURL .= "s";}
      $pageURL .= "://";
      if ($_SERVER["SERVER_PORT"] != "80") {
          $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
      } else {
          $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
      }
      return $pageURL;
  }
}


if (!function_exists('download')) {
  /**
   * 8. PHP强制下载文件
   * @param  [type] $filename [ 下载文件目录 ]
   * @return [type]           [ 文件下载选项 ]
   *
   * demo
   *
   * download(dirname(__FILE__).'/test.zip')
   */
  function download($filename){
      if ((isset($filename))&&(file_exists($filename))){
         header("Content-length: ".filesize($filename));
         header('Content-Type: application/octet-stream');
         header('Content-Disposition: attachment; filename="' . $filename . '"');
         readfile("$filename");
      } else {
         echo "Looks like file does not exist!";
      }
  }
}

if (!function_exists('cutStr')) {
  /**
   * 9. PHP截取字符串长度
   * @param  [type]  $string [ 待处理字符串 ]
   * @param  [type]  $sublen [ 截取长度 ]
   * @param  integer $start  [ 开始位置 默认为 0]
   * @param  string  $code   [ 字符编码 Utf-8,gb2312 默认为Utf-8 ]
   * @return [type]          [ 处理后的字串 ]
   */
  function cutStr($string, $sublen, $start = 0, $code = 'UTF-8'){
      if($code == 'UTF-8'){
          $pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";
          preg_match_all($pa, $string, $t_string);

          if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."...";
          return join('', array_slice($t_string[0], $start, $sublen));
      }else{
          $start = $start*2;
          $sublen = $sublen*2;
          $strlen = strlen($string);
          $tmpstr = '';

          for($i=0; $i<$strlen; $i++){
              if($i>=$start && $i<($start+$sublen)){
                  if(ord(substr($string, $i, 1))>129){
                      $tmpstr.= substr($string, $i, 2);
                  }else{
                      $tmpstr.= substr($string, $i, 1);
                  }
              }
              if(ord(substr($string, $i, 1))>129) $i++;
          }
          if(strlen($tmpstr)<$strlen ) $tmpstr.= "...";
          return $tmpstr;
      }
  }
}

if (!function_exists('getIp')) {
  /**
   * 10. 获取用户真实IP
   * @return [type] [ 返回IP地址 ]
   *
   * demo 
   * echo getIp();
   */
  function getIp() {
      if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
          $ip = getenv("HTTP_CLIENT_IP");
      else
          if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
              $ip = getenv("HTTP_X_FORWARDED_FOR");
          else
              if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
                  $ip = getenv("REMOTE_ADDR");
              else
                  if (isset ($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
                      $ip = $_SERVER['REMOTE_ADDR'];
                  else
                      $ip = "unknown";
      return ($ip);
  }
}

if (!function_exists('injCheck')) {
  /**
   * 11. PHP防止SQL注入
   * @param  [type] $sql_str [ 待过滤字符串内容 ]
   * @return [type]          [ 返回字符串内容,含有非法字符,返回非法字符! ]
   *
   * demo
   * echo injCheck('123456');
   */
  function injCheck($sql_str) { 
      $check = preg_match('/select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile/', $sql_str);
      if ($check) {
          echo '非法字符!!';
          exit;
      } else {
          return $sql_str;
      }
  }
}

if (!function_exists('message')) {
  /**
   * 12. PHP页面提示与跳转--提示用户操作结果,并跳转到相关页面
   * @param  [type] $msgTitle [提示标题]
   * @param  [type] $message  [提示内容]
   * @param  [type] $jumpUrl  [跳转链接]
   * @return [type]           [description]
   *
   * demo
   * message('操作提示','操作成功!','http://www.helloweba.com/');
   */
  function message($msgTitle,$message,$jumpUrl){
      $str = '<!DOCTYPE HTML>';
      $str .= '<html>';
      $str .= '<head>';
      $str .= '<meta charset="utf-8">';
      $str .= '<title>页面提示</title>';
      $str .= '<style type="text/css">';
      $str .= '*{margin:0; padding:0}a{color:#369; text-decoration:none;}a:hover{text-decoration:underline}body{height:100%; font:12px/18px Tahoma, Arial,  sans-serif; color:#424242; background:#fff}.message{width:450px; height:120px; margin:16% auto; border:1px solid #99b1c4; background:#ecf7fb}.message h3{height:28px; line-height:28px; background:#2c91c6; text-align:center; color:#fff; font-size:14px}.msg_txt{padding:10px; margin-top:8px}.msg_txt h4{line-height:26px; font-size:14px}.msg_txt h4.red{color:#f30}.msg_txt p{line-height:22px}';
      $str .= '</style>';
      $str .= '</head>';
      $str .= '<body>';
      $str .= '<div class="message">';
      $str .= '<h3>'.$msgTitle.'</h3>';
      $str .= '<div class="msg_txt">';
      $str .= '<h4 class="red">'.$message.'</h4>';
      $str .= '<p>系统将在 <span id="seconds" style="color:blue;font-weight:bold">3</span> 秒后自动跳转,如果不想等待,直接点击 <a href="'.$jumpUrl.'">这里</a> 跳转</p>';
      $str .= "<script>setTimeout('location.replace(\'".$jumpUrl."\')',2000)</script>";
      // $str .= "<script>setTimeout('function(){var s = document.getElementById(\'seconds\'); alert(s) }',2000)</script>";
      $str .= '</div>';
      $str .= '</div>';
      $str .= '</body>';
      $str .= '</html>';
      echo $str;
  }
}


if (!function_exists('changeTimeType')) {
  /**
   * 13. PHP计算时长--需要计算当前时间距离某个时间点的时长
   * @param  [type] $seconds [ 时间戳/时间戳  ]
   * @return [type]          [ 返回 hh:mm:ss 格式时间 ]
   *
   * demo
   * $seconds = 3712;
   * echo changeTimeType($seconds);
   */
  function changeTimeType($seconds) {
      if ($seconds > 3600) {
          $hours = intval($seconds / 3600);
          $minutes = $seconds % 3600;
          $time = $hours . ":" . gmstrftime('%M:%S', $minutes);
      } else {
          $time = gmstrftime('%H:%M:%S', $seconds);
      }
      return $time;
  }
}


if (!function_exists('logResult')) {
  /**
   * 14. PHP写日志
   * @param  string $str [ 填写日志内容 ]
   * @return [type]      [ 日志填写内容 ]
   *
   * demo
   * logResult('获取数据reselt=xxx');
   * 
   */
  function logResult($file_path,$str='') {
      $fp = fopen($file_path,"a");
      flock($fp, LOCK_EX) ;
      fwrite($fp,"执行日期:".strftime("%Y%m%d%H%M%S",time())."\n".$str."\n");
      flock($fp, LOCK_UN);
      fclose($fp);
  }
}


if (!function_exists('getthemonth')) {
  /**
   * 15. PHP获取当前月份第一天和最后一天
   * @param  [type] $date [ date('Y-m-d') ]
   * @return [type]       [ 返回本月第一天日期和最后一天日期 ]
   *
   * demo
   * $today = date("Y-m-d");
   * $day=getthemonth($today); 
   * echo "当月的第一天: ".$day[0]." 当月的最后一天: ".$day[1];
   */
  function getthemonth($date){
     $firstday = date('Y-m-01', strtotime($date));
     $lastday = date('Y-m-d', strtotime("$firstday +1 month -1 day"));
     return array($firstday,$lastday);
  }
}


if (!function_exists('visit')) {
  /**
   * 16. 测试出问题--待解决
   * 
   * PHP检查是否宕机 -- 定时任务去执行访问网站上的固定页面,如果访问出错就有可能是宕机了
   * @param  [type] $url [ 检查服务器上可访问 url ]
   * @return [type]      [返回 true or false]
   *
   * demo
   * if (visit("http://www.qq.com")) 
   *     echo "www.qq.com is OK"; 
   * else 
   *     echo "Website DOWN";
   */
  function visit($url){ 
    $agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
    $ch=curl_init(); 
    curl_setopt ($ch, CURLOPT_URL,$url ); 
    curl_setopt($ch, CURLOPT_USERAGENT, $agent); 
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt ($ch,CURLOPT_VERBOSE,false); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 5); 
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, FALSE); 
    curl_setopt($ch,CURLOPT_SSLVERSION,3); 
    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST, FALSE); 
    $page=curl_exec($ch); 
    // echo curl_error($ch); 
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
    curl_close($ch); 
    if($httpcode>=200 && $httpcode<300) return true; 
    else return false; 
  }
}


if (!function_exists('highlighter')) {
  /**
   * 17. PHP搜索和高亮显示字符串中的关键字
   * @param  [type] $text  [description]
   * @param  [type] $words [description]
   * @return [type]        [description]
   */
  function highlighter($text, $words) { 
    $split_words = explode(" " , $words ); 
    foreach($split_words as $word) { 
      $color = "#4285F4"; 
      $text = preg_replace("/($word)/i" , "<span style=\"color:".$color.";\"><b>$1</b></span>", $text ); 
    } 
    return $text; 
  }
}


if (!function_exists('retrieve')) {
  /**
   * 18. php获取文件名 -- 正则匹配
   * @param  [type] $url [http/https url]
   * @return [type]      [ 连接对应的文件名 ]
   */
  function retrieve($url) { 
      preg_match('/\/([^\/]+\.[a-z]+)[^\/]*$/',$url,$match); 
      return $match[1]; 
  }
}


if (!function_exists('getExt')) {
  /**
   * 19. php获取文件扩展名 
   * @param  [type] $url [ 文件地址 ]
   * @return [type]      [ 文件后缀名 ]
   */
  function getExt($url) {
      $path=parse_url($url); 
      $str=explode('.',$path['path']); 
      return $str[1]; 
  } 
}


if (!function_exists('ajaxReturn')) {
  /**
   * 20. ajax返回 json数据
   * @param  [type]  $info   [ 提示信息 ]
   * @param  integer $status [ 状态 ]
   * @param  [type]  $data   [ 数据 ]
   * @return [type]          [ json数据 ]
   *
   * demo
   * 
   * $data = array('新增数据','修改数据','更新数据');
   * $result = ajaxReturn('操作成功','0',$data);
   * echo $result;
   * 
   */
  function ajaxReturn($info,$status=0,$data=null){
    $result = array();
    $result['status'] = $status;
    $result['info'] = $info;
    $result['data'] = $data;

    // 返回json格式数据到客户端 包含状态信息
    header('COntent-Type:text/html;charset=utf-8');
    return json_encode($result);
  }
}


if (!function_exists('imgSetWord')) {
  /**
   * 21. 图片设置文字水印
   * @param  [type]  $pic    [ 原图片路径 ]
   * @param  [type]  $word   [ 水印文字 ]
   * @param  [type]  $font   [ 文字字体 ]
   * @param  [type]  $size   [ 字体大小 ]
   * @param  [type]  $x      [ 水印x坐标 ]
   * @param  [type]  $y      [ 水印y坐标 ]
   * @param  string  $newpic [ 生成新图片 ]
   * @param  integer $print  [ 是否打印图片 ]
   * @return [type]          [ 打印或生成图片 ]
   *
   * demo
   *
   * $font = './font/yahei.ttf';
   * imgSetWord('./image/02.png','何泽小生',$font,12,0,100,'./image/test.png',0);
   * 
   */
  function imgSetWord($pic,$word,$font,$size,$x,$y,$newpic='',$print=0){
    if($newpic == ''){
      $newpic = $pic;
    }
    // 图片对象
    $dst = imagecreatefromstring(file_get_contents($pic));

    // 字体颜色
    $color = imagecolorallocate($dst, 255, 312, 95);
    imagefttext($dst, $size, 0, $x, $y, $color, $font, $word);

    // 图片宽高等信息
    list($dst_w, $dst_h, $dst_type) = getimagesize($pic);

    if($print == 0){
      switch($dst_type){
        case 1: // GIF
          imagegif($dst,$newpic);
          break;
        case 2: // JPG
          imagejpeg($dst,$newpic);
          break;
        case 3: // PNG
          imagepng($dst,$newpic);
          break;
        default:
          break;    
      }
      return $newpic;
    }else{
      switch($dst_type){
        case 1: // GIF
          header('Content-Type: image/gif');
          imagegif($dst);
          break;
        case 2: //JPEG
          header('Content-Type: image/jpeg');
          imagejpeg($dst);
          break;
        case 3:
          header('Content-Type: image/png');
          imagepng($dst);
          break;
        default:
          break;
      }
    }
  }
}


if (!function_exists('scanDirs')) {
  /**
   * 22. 扫描目录(过滤指定目录/文件),返回目录/文件 数组
   * @param  [type] $dir    [ 待扫描目录路径 ]
   * @param  array  $filter [ 过滤文件名 ]
   * @return [type]         [ 扫描指定目录下文件/目录数组(一级) ]
   *
   * demo
   * 
   * $filter = array('yahei.ttf');
   * $file_names = scanDirs('.',$filter);
   * var_dump($file_names);
   * 
   */
  function scanDirs($dir,$filter=array()){
    // 扫描文件
    $files = scandir($dir);

    // 过滤指定目录
    $filter[] = '.';
    $filter[] = '..';
    $filter[] = '.git';

    // 去文件夹数组和过滤文件夹数组的交集
    $file = array_diff($files,$filter);
    $file = array_values($file);

    return $file;
  }
}


if (!function_exists('getFiles')) {
  /**
   * 23. 获取目录下的文件和目录(一级)
   * @param  [type] $path [ 路径 ]
   * @return [type]       [ 返回目录中文件名和目录名的数组集合 ]
   *
   * demo
   *
   * $data = getFiles('./');
   * var_dump($data);
   * 
   */
  function getFiles($path){
    // 判断是否为目录 true 连接 '/*' 获取目录下所有文件
    if(is_dir($path)){
      $path = $path.'/*';
    }

    $data = array();
    $files = array();
    $dirs = array();
    $n = 0;
    $m = 0;

    $temp = glob($path);
    // 遍历文件
    foreach($temp as $key=>$file){
      if(is_file($file)){
        $files[$n]['path'] = $file;
        $files[$n]['name'] = basename($file);
        $files[$n]['size'] = filesize($file);
        $files[$n]['lasttime'] = date("Y-m-d H:i:s",filemtime($file));
        $files[$n]['createtime'] = date("Y-m-d H:i:s",filectime($file));

        $n++;
      }
      if(is_dir($file)){
        $dirs[$m]['path'] = $file;
        $dirs[$m]['name'] = basename($file);
        $dirs[$m]['size'] = filesize($file);
        $dirs[$m]['lasttime'] = date("Y-m-d H:i:s",filemtime($file));
        $dirs[$m]['createtime'] = date("Y-m-d H:i:s",filectime($file));

        $m++;
      }
    }
    $data['file'] = $files;
    $data['dir'] = $dirs;

    return $data;
  }
}


if (!function_exists('copyDir')) {
  /**
   * 24. PHP复制目录
   * @param  [type] $strSrcDir [ 复制源目录 ]
   * @param  [type] $strDstDir [ 生成目录名 ]
   * @return [type]            [ true / false ]
   *
   * demo
   *
   * echo copyDir('./image','./images');
   * 
   */
  function copyDir($strSrcDir, $strDstDir){
    $dir = opendir( $strSrcDir );
    if(!$dir){
      return false;
    }
    if(!is_dir( $strDstDir )){
      if(!mkdir( $strDstDir )){
        return false;
      }
    }

    while( false !== ($file = readdir($dir))){
      if($file=='.' || $file=='..'){
        continue;
      }
      if(is_dir( $strSrcDir.'/'.$file )){
        if(!copydir( $strSrcDir.'/'.$file , $strDstDir.'/'.$file)){
          return false;
        }
      }else{
        if(!copy( $strSrcDir.'/'.$file , $strDstDir.'/'.$file)){
          return false;
        }
      }
    }

    closedir($dir);
    return true;
  }
}


if (!function_exists('delDir')) {
  /**
   * 25. 删除目录级目录下文件
   * @param  [type] $path [ 指定路径 ]
   * @return [type]       [description]
   *
   * demo
   *
   * delDir("./images");
   */
  function delDir($path){
    // 如果是目录则继续
    if(is_dir($path)){

      if(is_dir($path)){
        $len = strlen($path);
        if(substr($path, $len-1,$len)!=='/'){
          $path.='/';
        }
      }
      // 扫描目录下文件
      $p = scandir($path);
      // 遍历文件名
      foreach($p as $val){
        // 排除'.','..'
        if($val!=='.' && $val!=='..'){
          // 路径拼接后检验是目录递归回调 delDir() 函数
          if(is_dir($path.$val)){
            delDir($path.$val.'/');
            // 目录清空后删除空文件夹
            @rmdir($path.$val.'/');
          }else{
            // 如果是文件直接删除
            unlink($path.$val);
          }
        }
      }
      @rmdir($path);

    }else{
      // 如果是文件直接删除
      if(is_file($path)){
        unlink($path);
      }
    }
    return true;
  }
}


if (!function_exists('handle_isolation_str_to_arr')) {
  /**
   * 26. 将一个字符串通过一个特定的分割符拆分成多个字符串
   * @param  [type] $str       [ 待处理字符串 ]
   * @param  [type] $delimiter [ 分割字符 ]
   * @return [type]            [ 拆分之后的数组 ]
   *
   * demo
   *
   * $str='123##345##567##789##912';
   * $array = handle_isolation_str_to_arr($str,'##');
   * var_dump($array);
   */
  function handle_isolation_str_to_arr($str,$delimiter){
    if ($str){
      $res=explode($delimiter,$str);
      $i=0;
      foreach ($res as $k=>$v){
        if (empty($v)){
          array_splice($res,($k-$i),1);
          ++$i;
        }
      }
      return $res;
    }else{
      return false;
    }
  }
}


if (!function_exists('curl_get')) {
  /**
   * 27. curl接口调用【get】
   * @param  [type] $api [ 接口地址]
   * @return [type]      [ 成功返回数据,失败返回false ]
   * 
   * demo
   *
   * echo curl_get('http://localhost/other/my_php/data.php?id=1&pid=2');
   */
  function curl_get($api){
      $ch=curl_init();

      curl_setopt($ch, CURLOPT_URL, $api);
      curl_setopt($ch,CURLOPT_HEADER,FALSE);       #设置头文件的信息作为数据流输出
      curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);   #设置获取的信息以文件流的形式返回,而不是直接输出。

      $res=curl_exec($ch);

      curl_close($ch);

      return $res;
  }
}


if (!function_exists('curl_post')) {
  /**
   * 28. curl接口调用【post】
   * @param  [type] $api  [ 接口地址 ]
   * @param  [type] $data [ 传输数据 ]
   * @return [type]       [ 成功返回数据,失败返回false ]
   *
   * demo
   *
   * echo curl_post('http://localhost/other/my_php/data.php',array('id'=>'1','name'=>'zhangsan'));
   * 
   */
  function curl_post($api,$data){
      $ch = curl_init();

      curl_setopt($ch, CURLOPT_URL, $api);
      curl_setopt($ch, CURLOPT_HEADER, FALSE);        #设置头文件的信息作为数据流输出
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);        
      #设置获取的信息以文件流的形式返回,而不是直接输出。
      curl_setopt($ch, CURLOPT_POST, TRUE);      #设置post方式提交
      curl_setopt($ch, CURLOPT_POSTFIELDS, $data);       #提交数据

      $res=curl_exec($ch);

      curl_close($ch);

      return $res;
  }
}


if (!function_exists('https_request')) {
    /**
     * 29. GET,POST传参 curl调用接口链接返回状态
     * @param  [type] $url  [访问的接口链接]
     * @param  [type] $data [传参数据]
     * @return [type]       [返回url处理后的json数据]
     *
     * demo
     * echo https_request('http://localhost/other/my_php/data.php?id=1&name=zhangsan');
     * echo https_request('http://localhost/other/my_php/data.php',array('id'=>'1','name'=>'zhangsan'));
     * 
     */
    function https_request($url,$data = null){  
          $curl = curl_init();  
          curl_setopt($curl,CURLOPT_URL,$url);  
          curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);  
          curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0);  
          if(!empty($data)){  
              curl_setopt($curl,CURLOPT_POST,1);  
              curl_setopt($curl,CURLOPT_POSTFIELDS,$data);  
          }  
          curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);  
          $output = curl_exec($curl);  
          curl_close($curl); 

          return $output;  
    }
}


if (!function_exists( 'my_sys_uptime' ) ) {
    /**
     * 30. 获取 linux 服务器运行时间
     * @return [type] ['天:时:分:秒']
     *
     * demo
     * 
     * echo my_sys_uptime();
     */
    function  my_sys_uptime() {

        $output='';
        if (false === ($str = @file("/proc/uptime"))) return '00:00:00 仅支持linux系统下使用!';
        $str = explode(" ", implode("", $str));
        $str = trim($str[0]);
        $min = $str / 60;
        $hours = $min / 60;
        $days = floor($hours / 24);
        $hours = floor($hours - ($days * 24));
        $min = floor($min - ($days * 60 * 24) - ($hours * 60));
        if ($days !== 0) $output .= $days."天";
        if ($hours !== 0) $output .= $hours."小时";
        if ($min !== 0) $output .= $min."分钟";
        return $output;
    }
}

if (!function_exists( 'get_area' ) ) {
  /**
   * 31. 淘宝接口:根据ip获取所在城市名称
   * @param  string $ip [ 获取城市ip,为空时为本地ip ]
   * @return [type]     [ ip真实存在是返回查询数组,不存在 返回NULL ]
   *
   * demo
   *
   * var_dump(get_area());
   * var_dump(get_area('101.132.113.116'));
   */
  function get_area($ip = ''){
    if($ip == ''){
        $ip = GetIp();
    }
    $url = "http://ip.taobao.com/service/getIpInfo.php?ip={$ip}";
    $ret = https_request($url);
    $arr = json_decode($ret,true);
    return $arr;
  }
}


if(!function_exists('bubbleSort')){
    /**
     * 冒泡排序 -- 数组升序排列
     * @param $arr -- 待处理数组
     * @return mixed -- 数组元素从小到大排列
     *
     * demo
     *
     * $arr=array(101,1,43,54,62,21,66,32,78,36,76,39);
     * var_dump(bubbleSort($arr));
     */
    function bubbleSort($arr){
        $len = count($arr);
        //该层循环控制 需要冒泡的轮数
        for($i=1;$i<$len;$i++){
            //该层循环用来控制每轮 冒出一个数 需要比较的次数
            for($k=0;$k<$len-$i;$k++){
                if($arr[$k] > $arr[$k+1]){
                    $tmp = $arr[$k+1];
                    $arr[$k+1] = $arr[$k];
                    $arr[$k] = $tmp;
                }
            }
        }
        return $arr;
    }
}