您好,欢迎访问一九零五行业门户网

自各儿项目中PHP常用工具类大全分享

自己项目中php常用工具类大全分享
php代码   0)); $i ++) {              if ($number = strpos ( str_pad ( decbin ( ord ( substr ( $string, $i, 1 ) ) ), 8, '0', str_pad_left ), '0' )) {                  if ($length                     break;                  }                  $result .= substr ( $string, $i, $number );                  $length -= 1.0;                  $i += $number - 1;              } else {                  $result .= substr ( $string, $i, 1 );                  $length -= 0.5;              }          }          $result = htmlspecialchars ( $result, ent_quotes, 'utf-8' );          if ($i $strlen) {              $result .= $etc;          }          return $result;      }      /**      * 遍历文件夹      * @param string $dir      * @param boolean $all  true表示递归遍历      * @return array      */      public static function scanfdir($dir='', $all = false, &$ret = array()){          if ( false !== ($handle = opendir ( $dir ))) {              while ( false !== ($file = readdir ( $handle )) ) {                  if (!in_array($file, array('.', '..', '.git', '.gitignore', '.svn', '.htaccess', '.buildpath','.project'))) {                      $cur_path = $dir . '/' . $file;                      if (is_dir ( $cur_path )) {                          $ret['dirs'][] =$cur_path;                          $all && self::scanfdir( $cur_path, $all, $ret);                      } else {                          $ret ['files'] [] = $cur_path;                      }                  }              }              closedir ( $handle );          }          return $ret;      }      /**      * 邮件发送      * @param string $toemail      * @param string $subject      * @param string $message      * @return boolean      */      public static function sendmail($toemail = '', $subject = '', $message = '') {          $mailer = yii::createcomponent ( 'application.extensions.mailer.emailer' );          //邮件配置          $mailer->setlanguage('zh_cn');          $mailer->host = yii::app()->params['emailhost']; //发送邮件服务器          $mailer->port = yii::app()->params['emailport']; //邮件端口          $mailer->timeout = yii::app()->params['emailtimeout'];//邮件发送超时时间          $mailer->contenttype = 'text/html';//设置html格式          $mailer->smtpauth = true;          $mailer->username = yii::app()->params['emailusername'];          $mailer->password = yii::app()->params['emailpassword'];          $mailer->issmtp ();          $mailer->from = $mailer->username; // 发件人邮箱          $mailer->fromname = yii::app()->params['emailformname']; // 发件人姓名          $mailer->addreplyto ( $mailer->username );          $mailer->charset = 'utf-8';          // 添加邮件日志          $modelmail = new maillog ();          $modelmail->accept = $toemail;          $modelmail->subject = $subject;          $modelmail->message = $message;          $modelmail->send_status = 'waiting';          $modelmail->save ();          // 发送邮件          $mailer->addaddress ( $toemail );          $mailer->subject = $subject;          $mailer->body = $message;          if ($mailer->send () === true) {              $modelmail->times = $modelmail->times + 1;              $modelmail->send_status = 'success';              $modelmail->save ();              return true;          } else {              $error = $mailer->errorinfo;              $modelmail->times = $modelmail->times + 1;              $modelmail->send_status = 'failed';              $modelmail->error = $error;              $modelmail->save ();              return false;          }      }      /**      * 判断字符串是utf-8 还是gb2312      * @param unknown $str      * @param string $default      * @return string      */      public static function utf8_gb2312($str, $default = 'gb2312')      {          $str = preg_replace(/[\x01-\x7f]+/, , $str);          if (emptyempty($str)) return $default;          $preg =  array(              gb2312 => /^([\xa1-\xf7][\xa0-\xfe])+$/, //正则判断是否是gb2312              utf-8 => /^[\x{4e00}-\x{9fa5}]+$/u,      //正则判断是否是汉字(utf8编码的条件了),这个范围实际上已经包含了繁体中文字了          );          if ($default == 'gb2312') {              $option = 'utf-8';          } else {              $option = 'gb2312';          }          if (!preg_match($preg[$default], $str)) {              return $option;          }          $str = @iconv($default, $option, $str);          //不能转成 $option, 说明原来的不是 $default          if (emptyempty($str)) {              return $option;          }          return $default;      }      /**      * utf-8和gb2312自动转化      * @param unknown $string      * @param string $outencoding      * @return unknown|string      */      public static function safeencoding($string,$outencoding = 'utf-8')      {          $encoding = utf-8;          for($i = 0; $i strlen ( $string ); $i ++) {              if (ord ( $string {$i} )                 continue;              if ((ord ( $string {$i} ) & 224) == 224) {                  // 第一个字节判断通过                  $char = $string {++ $i};                  if ((ord ( $char ) & 128) == 128) {                      // 第二个字节判断通过                      $char = $string {++ $i};                      if ((ord ( $char ) & 128) == 128) {                          $encoding = utf-8;                          break;                      }                  }              }              if ((ord ( $string {$i} ) & 192) == 192) {                  // 第一个字节判断通过                  $char = $string {++ $i};                  if ((ord ( $char ) & 128) == 128) {                      // 第二个字节判断通过                      $encoding = gb2312;                      break;                  }              }          }          if (strtoupper ( $encoding ) == strtoupper ( $outencoding ))              return $string;          else              return @iconv ( $encoding, $outencoding, $string );      }      /**      * 返回二维数组中某个键名的所有值      * @param input $array      * @param string $key      * @return array      */      public static function array_key_values($array =array(), $key='')      {          $ret = array();          foreach((array)$array as $k=>$v){              $ret[$k] = $v[$key];          }          return $ret;      }      /**      * 判断 文件/目录 是否可写(取代系统自带的 is_writeable 函数)      * @param string $file 文件/目录      * @return boolean      */      public static function is_writeable($file) {          if (is_dir($file)){              $dir = $file;              if ($fp = @fopen($dir/test.txt, 'w')) {                  @fclose($fp);                  @unlink($dir/test.txt);                  $writeable = 1;              } else {                  $writeable = 0;              }          } else {              if ($fp = @fopen($file, 'a+')) {                  @fclose($fp);                  $writeable = 1;              } else {                  $writeable = 0;              }          }          return $writeable;      }      /**      * 格式化单位      */      static public function byteformat( $size, $dec = 2 ) {          $a = array ( b , kb , mb , gb , tb , pb );          $pos = 0;          while ( $size >= 1024 ) {              $size /= 1024;              $pos ++;          }          return round( $size, $dec ) .   . $a[$pos];      }      /**      * 下拉框,单选按钮 自动选择      *      * @param $string 输入字符      * @param $param  条件      * @param $type   类型      * selected checked      * @return string      */      static public function selected( $string, $param = 1, $type = 'select' ) {          $true = false;          if ( is_array( $param ) ) {              $true = in_array( $string, $param );          }elseif ( $string == $param ) {              $true = true;          }          $return='';          if ( $true )              $return = $type == 'select' ? 'selected=selected' : 'checked=checked';          echo $return;      }      /**      * 下载远程图片      * @param string $url 图片的绝对url      * @param string $filepath 文件的完整路径(例如/www/images/test) ,此函数会自动根据图片url和http头信息确定图片的后缀名      * @param string $filename 要保存的文件名(不含扩展名)      * @return mixed 下载成功返回一个描述图片信息的数组,下载失败则返回false      */      static public function downloadimage($url, $filepath, $filename) {          //服务器返回的头信息          $responseheaders = array();          //原始图片名          $originalfilename = '';          //图片的后缀名          $ext = '';          $ch = curl_init($url);          //设置curl_exec返回的值包含http头          curl_setopt($ch, curlopt_header, 1);          //设置curl_exec返回的值包含http内容          curl_setopt($ch, curlopt_returntransfer, 1);          //设置抓取跳转(http 301,302)后的页面          curl_setopt($ch, curlopt_followlocation, 1);          //设置最多的http重定向的数量          curl_setopt($ch, curlopt_maxredirs, 3);          //服务器返回的数据(包括http头信息和内容)          $html = curl_exec($ch);          //获取此次抓取的相关信息          $httpinfo = curl_getinfo($ch);          curl_close($ch);          if ($html !== false) {              //分离response的header和body,由于服务器可能使用了302跳转,所以此处需要将字符串分离为 2+跳转次数 个子串              $httparr = explode(\r\n\r\n, $html, 2 + $httpinfo['redirect_count']);              //倒数第二段是服务器最后一次response的http头              $header = $httparr[count($httparr) - 2];              //倒数第一段是服务器最后一次response的内容              $body = $httparr[count($httparr) - 1];              $header.=\r\n;              //获取最后一次response的header信息              preg_match_all('/([a-z0-9-_]+):\s*([^\r\n]+)\r\n/i', $header, $matches);              if (!emptyempty($matches) && count($matches) == 3 && !emptyempty($matches[1]) && !emptyempty($matches[1])) {                  for ($i = 0; $i count($matches[1]); $i++) {                      if (array_key_exists($i, $matches[2])) {                          $responseheaders[$matches[1][$i]] = $matches[2][$i];                      }                  }              }              //获取图片后缀名              if (0 '{(?:[^\/\\\\]+)\.(jpg|jpeg|gif|png|bmp)$}i', $url, $matches)) {                  $originalfilename = $matches[0];                  $ext = $matches[1];              } else {                  if (array_key_exists('content-type', $responseheaders)) {                      if (0 '{image/(\w+)}i', $responseheaders['content-type'], $extmatches)) {                          $ext = $extmatches[1];                      }                  }              }              //保存文件              if (!emptyempty($ext)) {                  //如果目录不存在,则先要创建目录                  if(!is_dir($filepath)){                      mkdir($filepath, 0777, true);                  }                  $filepath .= '/'.$filename..$ext;                  $local_file = fopen($filepath, 'w');                  if (false !== $local_file) {                      if (false !== fwrite($local_file, $body)) {                          fclose($local_file);                          $sizeinfo = getimagesize($filepath);                          return array('filepath' => realpath($filepath), 'width' => $sizeinfo[0], 'height' => $sizeinfo[1], 'orginalfilename' => $originalfilename, 'filename' => pathinfo($filepath, pathinfo_basename));                      }                  }              }          }          return false;      }      /**      * 查找ip是否在某个段位里面      * @param string $ip 要查询的ip      * @param $arrip     禁止的ip      * @return boolean      */      public static function ipaccess($ip='0.0.0.0', $arrip = array()){          $access = true;          $ip && $arr_cur_ip = explode('.', $ip);          foreach((array)$arrip as $key=> $value){              if($value == '*.*.*.*'){                  $access = false; //禁止所有                  break;              }              $tmp_arr = explode('.', $value);              if(($arr_cur_ip[0] == $tmp_arr[0]) && ($arr_cur_ip[1] == $tmp_arr[1])) {                  //前两段相同                  if(($arr_cur_ip[2] == $tmp_arr[2]) || ($tmp_arr[2] == '*')){                      //第三段为* 或者相同                      if(($arr_cur_ip[3] == $tmp_arr[3]) || ($tmp_arr[3] == '*')){                          //第四段为* 或者相同                          $access = false; //在禁止ip列,则禁止访问                          break;                      }                  }              }          }          return $access;      }      /**      * @param string $string 原文或者密文      * @param string $operation 操作(encode | decode), 默认为 decode      * @param string $key 密钥      * @param int $expiry 密文有效期, 加密时候有效, 单位 秒,0 为永久有效      * @return string 处理后的 原文或者 经过 base64_encode 处理后的密文      *      * @example      *      * $a = authcode('abc', 'encode', 'key');      * $b = authcode($a, 'decode', 'key');  // $b(abc)      *      * $a = authcode('abc', 'encode', 'key', 3600);      * $b = authcode('abc', 'decode', 'key'); // 在一个小时内,$b(abc),否则 $b 为空      */      public
其它类似信息

推荐信息