php 常用方法封装

目录

文件处理

  • 打印输出数据到文件

    function p($data, $force = false, $file = null)
    {
        is_null($file) && $file = env('runtime_path') . date('Ymd') . '.txt';
        $str = ((is_string($data) ? $data : (is_array($data) || is_object($data))) ? print_r($data, true) : var_export($data, true)) . PHP_EOL;
        $force ? file_put_contents($file, $str) : file_put_contents($file, $str, FILE_APPEND);
    }
  • 打印log日志

function wx_log($domainname, $filename)
    {
        $years = date('Y-m-d');
        //设置路径目录信息
        $url = $filename . date('Ymd') . 'log.txt';
        $dir_name = dirname($url);
        //目录不存在就创建
        if (!file_exists($dir_name)) {
            //iconv防止中文名乱码
            $res = mkdir(iconv("UTF-8", "GBK", $dir_name), 0777, true);
        }
        $fp = fopen($url, "a");//打开文件资源通道 不存在则自动创建
        fwrite($fp, date("Y-m-d H:i:s") . var_export($domainname, true) . "\r\n");//写入文件
   
    }
  • 图片转base64

function base64EncodeImage ($image_file) {
  $base64_image = '';
  $image_info = getimagesize($image_file);
  $image_data = fread(fopen($image_file, 'r'), filesize($image_file));
  $base64_image = 'data:' . $image_info['mime'] . ';base64,' . chunk_split(base64_encode($image_data));
  return urlencode($base64_image);
}
  • 获取图片size

function getUriLen($uri,$user='',$pw='')
    {
        ob_start();

        $ch = curl_init($uri);
        curl_setopt($ch, CURLOPT_HEADER, 1);
        curl_setopt($ch, CURLOPT_NOBODY, 1);  //nobody是关键
        if (!empty($user) && !empty($pw))
        {
            $headers = array('Authorization: Basic ' . base64_encode($user.':'.$pw));
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        }
        $okay = curl_exec($ch);
        curl_close($ch);

        $head = ob_get_contents();
        ob_end_clean();

        $regex = '/Content-Length:\s+(.+)/';
        preg_match($regex, $head, $matches);

        return $matches[1];
    }
  • 获取验证码(通过GD库)$code圖片驗證碼名稱

function getCode($num,$w,$h,$code_name) {
    $code = "";
    for ($i = 0;$i < $num; $i++){
        $code .= rand(0, 9);
    }
    //4位验证码也可以用rand(1000,9999)直接生成
    //将生成的验证码写入session,备验证时用
    Cache::set($code_name,$code,600);
    //创建图片,定义颜色值
    header("Content-type: image/PNG");
    $im = imagecreate($w, $h);
    $black = imagecolorallocate($im, 0, 0, 0);
    $gray = imagecolorallocate($im, 200, 200, 200);
    $bgcolor = imagecolorallocate($im, 255, 255, 255);
    //填充背景
    imagefill($im, 0, 0, $gray);
    //画边框
    imagerectangle($im, 0, 0, $w-1, $h-1, $black);
    //随机绘制两条虚线,起干扰作用
    $style = array ($black,$black,$black,$black,$black, $gray,$gray,$gray,$gray,$gray);
    imagesetstyle($im, $style);
    $y1 = rand(0, $h);
    $y2 = rand(0, $h);
    $y3 = rand(0, $h);
    $y4 = rand(0, $h);
    imageline($im, 0, $y1, $w, $y3, IMG_COLOR_STYLED);
    imageline($im, 0, $y2, $w, $y4, IMG_COLOR_STYLED);
    //在画布上随机生成大量黑点,起干扰作用;
    for ($i = 0; $i < 80; $i++) {
        imagesetpixel($im, rand(0, $w), rand(0, $h), $black);
    }
    //将数字随机显示在画布上,字符的水平间距和位置都按一定波动范围随机生成
    $strx = rand(3, 8);
    for ($i = 0; $i < $num; $i++) {
        $strpos = rand(1, 6);
        imagestring($im, 5, $strx, $strpos, substr($code, $i, 1), $black);
        $strx += rand(8, 12);
    }
    imagepng($im);//输出图片
    imagedestroy($im);//释放图片所占内存
}
  • 返回文件格式

function file_format($str){
        // 取文件后缀名
        $str=strtolower(pathinfo($str, PATHINFO_EXTENSION));
        // 图片格式
        $image=array('webp','jpg','png','ico','bmp','gif','tif','pcx','tga','bmp','pxc','tiff','jpeg','exif','fpx','svg','psd','cdr','pcd','dxf','ufo','eps','ai','hdri');
        // 视频格式
        $video=array('mp4','avi','3gp','rmvb','gif','wmv','mkv','mpg','vob','mov','flv','swf','mp3','ape','wma','aac','mmf','amr','m4a','m4r','ogg','wav','wavpack');
        // 压缩格式
        $zip=array('rar','zip','tar','cab','uue','jar','iso','z','7-zip','ace','lzh','arj','gzip','bz2','tz');
        // 文档格式
        $text=array('exe','doc','ppt','xls','wps','txt','lrc','wfs','torrent','html','htm','java','js','css','less','php','pdf','pps','host','box','docx','word','perfect','dot','dsf','efe','ini','json','lnk','log','msi','ost','pcs','tmp','xlsb');
        // 匹配不同的结果
        switch ($str) {
            case in_array($str, $image):
                return 'image';
                break;
            case in_array($str, $video):
                return 'video';
                break;
            case in_array($str, $zip):
                return 'zip';
                break;
            case in_array($str, $text):
                return 'text';
                break;
            default:
                return 'image';
                break;
        }
    }
  • base64 图片上传

 	/**
     * base64 图片上传
     * @param string $content 图片base64内容
     * @param string $dirname 图片存储目录
     * @return string
     */
    function base64_image($content, $dirname = 'base64/')
    {
        try {
            if (preg_match('|^data:image/(.*?);base64,|i', $content)) {
                list($ext, $base) = explode('|||', preg_replace('|^data:image/(.*?);base64,|i', '$1|||', $content));
                $info = File::save($dirname . md5($base) . '.' . (empty($ext) ? 'tmp' : $ext), base64_decode($base));
                return $info['url'];
            } else {
                return $content;
            }
        } catch (\Exception $e) {
            return $content;
        }
    }
  • 清空/删除 文件夹

/**
 * 清空/删除 文件夹
 * @param string $dirname 文件夹路径
 * @param bool $self 是否删除当前文件夹
 * @return bool
 */
function do_rmdir($dirname, $self = true) {
    if (!file_exists($dirname)) {
        return false;
    }
    if (is_file($dirname) || is_link($dirname)) {
        return unlink($dirname);
    }
    $dir = dir($dirname);
    if ($dir) {
        while (false !== $entry = $dir->read()) {
            if ($entry == '.' || $entry == '..') {
                continue;
            }
            do_rmdir($dirname . '/' . $entry);
        }
    }
    $dir->close();
    $self && rmdir($dirname);
}
  • 文件夹遍历

function allFile($path = __DIR__, $level = 1)
{
    if (is_dir($path) && is_readable($path)) {
        if($pd = opendir($path)) {
            while (($file = readdir($pd)) !== false) {
                if($file != '.' && $file != '..') {
                    if (($subPath = $path . DIRECTORY_SEPARATOR . $file) && is_dir($subPath)) {
                        echo "<pre />";
                        echo '<span style="color: red;font-weight:bold;">' . str_repeat("--", $level) . $subPath . '</span>';
                        self::allFile($subPath, $level++);
                    } else {
                        echo "<pre />";
                        echo str_repeat("--", $level) . $subPath;
                    }
                }
            }
        }
    } else {
        echo "{$path} is not a available dir";
    }
}

手机号处理

  • 生成虚拟手机号

function createNoncePone($header='100',$length = 8) {
    $chars = "0123456789";
    $str   = $header;
    for ($i = 0; $i < $length; $i++) {
        $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
    }
    return $str;

  • 验证是否为手机

function checkPhone($phone){
    return preg_match('/(^1\d{10})$/',$phone);
}
  • 手机号脱敏、替换手机号中间四位

function encryptTel($tel){
    return substr_replace($tel, '****', 3, 4);
}
  • 检测手机的格式

function checkMobile($sMobile)
{
    $sPregMatch = '/^1(3[0-9]|4[57]|5[0-35-9]|7[0-9]|8[0-9]|9[0-9])\d{8}$/';
    return preg_match($sPregMatch, $sMobile);
}

时间处理

  • 日期格式标准输出

    function format_datetime($datetime, $format = 'Y年m月d日 H:i:s')
    {
        return date($format, strtotime($datetime));
    }
  • 获取当前时间

function getNow()
    {
        ini_set('date.timezone', 'Asia/Shanghai');
        return date("Y-m-d H:i:s");
    }
  • 获取当前时间及毫秒数

function getNowMicrotime()
    {
        list($usec, $sec) = explode(" ", microtime());
        return date('Y-m-d H:i:s', $sec) . '.' . substr($usec, 2, 6);
    }
  • 求两个日期之间相差的天数

	//(针对1970年1月1日之后,求之前可以采用泰勒公式)
    function diffBetweenTwoDays($day1, $day2)
    {
        $second1 = strtotime($day1);
        $second2 = strtotime($day2);
        
        if ($second1 < $second2) {
            $tmp = $second2;
            $second2 = $second1;
            $second1 = $tmp;
        }
        return ($second1 - $second2) / 86400;
    }
  • 把指定时间段切份 - N份

function cut_up_time_part($start, $end, $nums = 7, $format = true)
    {
        $start = strtotime($start);
        $end = strtotime($end);
        $parts = ($end - $start) / $nums;
        $last = ($end - $start) % $nums;
        if ($last > 0) {
            $parts = ($end - $start - $last) / $nums;
        }
        for ($i = 1; $i <= $nums; $i++) {
            $_end = $start + $parts * $i;
            $arr[] = array($start + $parts * ($i - 1), $_end);
        }
        $len = count($arr) - 1;
        $arr[$len][1] = $arr[$len][1] + $last;
        if ($format) {
            foreach ($arr as $key => $value) {
                $arr[$key][0] = date("Y-m-d", $value[0]);
                $arr[$key][1] = date("Y-m-d", $value[1]);
            }
        }
        return $arr;
    }
  • 获取当前时间及毫秒数

function getNowMicrotime()
{
    list($usec, $sec) = explode(" ", microtime());
    return date('Y-m-d H:i:s',$sec).'.'.substr($usec,2,6);
}
  • 获取时间戳毫秒

function microtime_float()
{
    return microtime(true)*10000;
}
  • 倒计时

function formatRestTime($date, $hour = 6){
    if (strtotime($date) == time() && $hour == 24) {
        return '23:59:59';
    }
    if (strtotime($date) < strtotime('-' . $hour . ' hour')) {
        return 0;
    }
    $times = 3600 * $hour - (time() - strtotime($date));

    // 天数
    $day = 0;
    // 小时
    $hour = floor(($times-86400 * $day)/3600);
    $second = $times%3600;
    // 分钟
    // $minute = floor(($times-86400 * $day-3600 * $hour)/60);
    $minute = floor($second/60);
    //秒
    $second = $second%60;
    return $hour.':'.$minute.':'.$second;
}
  • 获取两个时间的时间差

function timediff( $begin_time, $end_time )
{

    if ( $begin_time < $end_time ) {
        $starttime = $begin_time;
        $endtime = $end_time;
    }
    /*
    else {
        $starttime = $end_time;
        $endtime = $begin_time;
    }
    */
    $timediff = $endtime - $starttime;
    $days = intval( $timediff / 86400 );
    $remain = $timediff % 86400;
    $hours = intval( $remain / 3600 );
    $remain = $remain % 3600;
    $mins = intval( $remain / 60 );
    $secs = $remain % 60;
    return $hours.':'.$mins.':'.$secs;
    //$res = array( "day" => $days, "hour" => $hours, "min" => $mins, "sec" => $secs );
    //return $res;
}
  • 生成时间区间列表

function date_range($first, $last, $step = '+1 day', $output_format = 'd/m/Y' ) {
        $dates = array();
        
        $current = strtotime($first);
        
        $last = strtotime($last);
        
        while( $current <= $last ) {
            $dates[] = date($output_format, $current);
            
            $current = strtotime($step, $current);
            
        }
        
        return $dates;
    }
  • excel导出时间转换

function excelTime($date, $time = false) {
      if(function_exists('GregorianToJD')){
          if (is_numeric( $date )) {
          $jd = GregorianToJD( 1, 1, 1970 );
          $gregorian = JDToGregorian( $jd + intval ( $date ) - 25569 );
          $date = explode( '/', $gregorian );
          $date_str = str_pad( $date [2], 4, '0', STR_PAD_LEFT )
          ."-". str_pad( $date [0], 2, '0', STR_PAD_LEFT )
          ."-". str_pad( $date [1], 2, '0', STR_PAD_LEFT )
          . ($time ? " 00:00:00" : '');
          return $date_str;
          }
      }else{
          $date=$date>25568?$date+1:25569;
          /*There was a bug if Converting date before 1-1-1970 (tstamp 0)*/
          $ofs=(70 * 365 + 17+2) * 86400;
          $date = date("Y-m-d",($date * 86400) - $ofs).($time ? " 00:00:00" : '');
      }
    return $date;
  }
  • 分钟/天/月/年前

function time_ago($agoTime)
{
    $agoTime = (int)$agoTime;

    // 计算出当前日期时间到之前的日期时间的毫秒数,以便进行下一步的计算
    $time = time() - $agoTime;

    if ($time >= 31104000) { // N年前
        $num = (int)($time / 31104000);
        return $num.'年前';
    }
    if ($time >= 2592000) { // N月前
        $num = (int)($time / 2592000);
        return $num.'月前';
    }
    if ($time >= 86400) { // N天前
        $num = (int)($time / 86400);
        return $num.'天前';
    }
    if ($time >= 3600) { // N小时前
        $num = (int)($time / 3600);
        return $num.'小时前';
    }
    if ($time > 60) { // N分钟前
        $num = (int)($time / 60);
        return $num.'分钟前';
    }
    return '1分钟前';
}
  • 获取当天是本月的第几周

function get_week(){
    $wk_day=date('w'); //今天周几
    $day=date('d'); //今天几号
    $week=array('日','一','二','三','四','五','六'); //规范化周日的表达
    $d=ceil($day/7); //计算是第几个星期几
    $str=date("Y年n月j日")." 星期".$week[$wk_day]." - 本月的第 ".$d." 个星期".$week[$wk_day];
    return $str;
}

字符串处理

  • 随机新增虚拟阅读数

function addviews($num=0,$max=5){
    return $num+rand(0,$max);
}
  • 字符串加密,解密

/**
 * 加密方法
 * @param string $data 要加密的字符串
 * @param string $key 加密密钥
 * @param int $expire 过期时间 (单位:秒)
 * @return string
 */
function _encrypt($data, $key, $expire = 0) {
    $key = md5($key);
    $data = base64_encode($data);
    $x = 0;
    $len = strlen($data);
    $l = strlen($key);
    $char = '';
    for ($i = 0; $i < $len; $i++) {
        if ($x == $l) $x=0;
        $char .= substr($key, $x, 1);
        $x++;
    }
    $str = sprintf('%010d', $expire ? $expire + time() : 0);
    for ($i = 0; $i < $len; $i++) {
        $str .= chr(ord(substr($data,$i,1)) + (ord(substr($char,$i,1)))%256);
    }
    $str = base64_encode($str);

    echo $str.'<br>';

    $str = str_replace(array('=','+','/'),array('O0O0O','o000o','oo00o'),$str);
    $str .= '-'.md5($str);
    return $str;
}

/** * 解密方法
 * @param string $data 要解密的字符串 (必须是think_encrypt方法加密的字符串)
 * @param string $key 加密密钥
 * @return string
 */
function _decrypt($data, $key){
    $dataary = explode('-',$data);
//    echo "<pre>";print_r($dataary);die;
    if (md5($dataary[0]) != $dataary[1]){
        return '数据错误';
    }
    $data = str_replace(array('O0O0O','o000o','oo00o'), array('=','+','/'),$dataary[0]);
    $key = md5($key);
    $x = 0;
    $data = base64_decode($data);
    $expire = substr($data, 0, 10);
    $data = substr($data, 10);
    if($expire > 0 && $expire < time()) {
        return '已过期';
    }
    $len = strlen($data);
    $l = strlen($key);
    $char = $str = '';
    for ($i = 0; $i < $len; $i++) {
        if ($x == $l) $x = 0;
        $char .= substr($key, $x, 1);
        $x++;
    }
    for ($i = 0; $i < $len; $i++) {
        if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1))) {
            $str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));
        }
        else{
            $str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
        }
    }
    return base64_decode($str);
}
  • UTF8字符串加密

    function encode($string)
    {
        list($chars, $length) = ['', strlen($string = iconv('utf-8', 'gbk', $string))];
        for ($i = 0; $i < $length; $i++) {
            $chars .= str_pad(base_convert(ord($string[$i]), 10, 36), 2, 0, 0);
        }
        return $chars;
    }
  • UTF8字符串解密

    function decode($string)
    {
        $chars = '';
        foreach (str_split($string, 2) as $char) {
            $chars .= chr(intval(base_convert($char, 36, 10)));
        }
        return iconv('gbk', 'utf-8', $chars);
    }
  • 生成随机数

 function createNonceStr($length = 10, $letter = '')
    {
        $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        $str = "";
        for ($i = 0; $i < $length; $i++) {
            $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
        }
        return date('Ymd', time()) . $letter . $str;
    }
  • Emoji原形转换为String

function Emojiencode($content)
    {
        return json_decode(preg_replace_callback("/(\\\u[ed][0-9a-f]{3})/i", function ($maps) {
            return addslashes($maps[0]);
        },                                       json_encode($content))
        );
    }
  • 去除字符串类相同数据

function Strunique($str)
    {
        $arr = explode(',', $str);
        $arr = array_unique($arr);
        $data = '';
        //使用foreach循环拼接也可以得到,得到的效果是一样的
        foreach ($arr as $key => $value) {
            $data .= $value . ',';//拼接关键代码</span></strong>
        }
        $data = trim($data, ',');
        return $data;
    }
  • 下划线后的首字母大写

function ucwordsString($str)
    {
        $str = str_replace('_', ' ', $str);
        $str = ucwords($str);
        $str = str_replace(' ', '', $str);
        $str = lcfirst($str);
        echo $str;
    }
  • 特殊字符匹配

function log_contents_reg($type, $str)
    {
        $result = array();
        if (is_array($str)) {
            return false;
        }
        if ($type == '<') {
            preg_match_all("/^(.*)(?:<)/i", $str, $result);
        }
        if ($type == '<>') {
            preg_match_all("/(?:<)(.*)(?:>)/i", $str, $result);
        }
        if ($type == '()') {
            preg_match_all("/(?:\()(.*)(?:\))/i", $str, $result);
        }
        if ($type == '[]') {
            preg_match_all("/(?:\[)(.*)(?:\])/i", $str, $result);
        }
        if ($type == '{}') {
            preg_match_all("/(?:\{)(.*)(?:\})/i", $str, $result);
        }
        return $result[1][0];
    }
  • 截取长字符串

function cutLongStr($str, $len = 10){
    if (!$str) {
        return '';
    }
    if (mb_strlen($str) < 10) {
        return $str;
    }

    return mb_substr($str, 0, 10) . '...';
}
  • 字符串脱敏

function encrypString($str='',$starStart=1,$starNum=3){
    $strlen =   mb_strlen($str);
    $ret    =   mb_substr($str,0,$starStart);
    if($strlen>$starStart){
        if($strlen<($starStart+$starNum)){
            $starNum    =   $strlen-$starStart;
        }
        for($i=0;$i<$starNum;$i++){
            $ret    .=  '*';
        }
        if($strlen>($starStart+$starNum)){
            $ret    .=  mb_substr($str,$starStart+$starNum,$strlen);
        }
    }
    return $ret;
}
  • 过滤Emoji表情

function filterEmoji($str)
{
    //过滤Emoji
    $str = preg_replace_callback(
        '/./u',
        function (array $match) {
            return strlen($match[0]) >= 4 ? '' : $match[0];
        },
        $str);
    //过滤特殊字符
    $regex = "/\/|\~|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\+|\{|\}|\:|\<|\>|\?|\[|\]|\,|\.|\/|\;|\'|\`|\-|\=|\\\|\|/";
    return preg_replace($regex,"",$str);
}
  • 过滤空白

function myTrim($str)
{
    $search = array(" "," ","\n","\r","\t");
    $replace = array("","","","","");
    return str_replace($search, $replace, $str);
}
  • 过滤敏感字符

function deletehtml($str) {
    $str = trim($str); //清除字符串两边的空格
    $str = strip_tags($str); //利用php自带的函数清除html格式
    // $str = preg_replace("/\t/", "", $str); //使用正则表达式匹配需要替换的内容,如:空格,换行,并将替换为空。
    $str = preg_replace("/\r\n/", "", $str);
    $str = preg_replace("/\r/", "", $str);
    $str = preg_replace("/\n/", "", $str);
    $str = preg_replace("/ /", "", $str);
    $str = preg_replace("/  /", "", $str);  //匹配html中的空格
    $str = str_replace("&nbsp;", "", $str);
    $str = str_replace("&middot;", "", $str);
    $str = str_replace("&rdquo;", "", $str);
    $str = str_replace("&ldquo;", "", $str);
    return trim($str); //返回字符串
}
  • 生成订单号

function get_order_num(){
    $order_date = date('Y-m-d');
    //订单号码主体(YYYYMMDDHHIISSNNNNNNNN)
    $order_id_main = date('YmdHis') . rand(10000000,99999999);
    //订单号码主体长度
    $order_id_len = strlen($order_id_main);
    $order_id_sum = 0;
    for($i=0; $i<$order_id_len; $i++){
        $order_id_sum += (int)(substr($order_id_main,$i,1));
    }
    //唯一订单号码(YYYYMMDDHHIISSNNNNNNNNCC)
    $order_id = $order_id_main . str_pad((100 - $order_id_sum % 100) % 100,2,'0',STR_PAD_LEFT);
    return $order_id;
}
  • 截取字符串长度,超出部分用省略号代替

function subText($text, $length)
{
    if (mb_strlen($text, 'utf8') > $length) {
        return mb_substr($text, 0, $length, 'utf8') . '...';
    } else {
        return $text;
    }
}
  • 密码加密

function md5pwd($pwd){
    $pwd = md5(sha1($pwd).'..*123qwe');
    return $pwd;
}
  • 将内容进行UNICODE编码,编码后的内容格式:\u56fe\u7247 (原始:图片)

function unicode_encode($name)
{
    $name = iconv('UTF-8', 'UCS-2', $name);
    $len = strlen($name);
    $str = '';
    for ($i = 0; $i < $len - 1; $i = $i + 2)
    {
        $c = $name[$i];
        $c2 = $name[$i + 1];
        if (ord($c) > 0)
        {    // 两个字节的文字
            $str .= '\u'.base_convert(ord($c), 10, 16).base_convert(ord($c2), 10, 16);
        }
        else
        {
            $str .= $c2;
        }
    }
    return $str;
}
// 将UNICODE编码后的内容进行解码,编码后的内容格式:\u56fe\u7247 (原始:图片)
function unicode_decode($name)
{
    // 转换编码,将Unicode编码转换成可以浏览的utf-8编码
    $pattern = '/([\w]+)|(\\\u([\w]{4}))/i';
    preg_match_all($pattern, $name, $matches);
    if (!empty($matches))
    {
        $name = '';
        for ($j = 0; $j < count($matches[0]); $j++)
        {
            $str = $matches[0][$j];
            if (strpos($str, '\\u') === 0)
            {
                $code = base_convert(substr($str, 2, 2), 16, 10);
                $code2 = base_convert(substr($str, 4), 16, 10);
                $c = chr($code).chr($code2);
                $c = iconv('UCS-2', 'UTF-8', $c);
                $name .= $c;
            }
            else
            {
                $name .= $str;
            }
        }
    }
    return $name;
}

  • 判断字符串包含类型

function EnglishOrChinese($str){

        $strA= trim($str);

        $lenA= strlen($strA); //检测字符串实际长度

        $lenB= mb_strlen($strA, "utf-8"); //文件的编码方式要是UTF8   

        if($lenA=== $lenB) {    

            return 'ENGLISH';     //'纯英文';

        }else {   

           if($lenA% $lenB== 0) { 

               return 'CHINESE';      //'纯汉字';

           }else {  

               return 'MIXTURE';      //'汉英混合';  
           }    
       }

    }

网络请求相关

  • 判断是否是微信浏览器访问

function is_weixin()
{
    if ( strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false ) {
        return true;
    }
    return false;
}
  • 判断是不是手机访问

function isMobile()
{
    // 如果有HTTP_X_WAP_PROFILE则一定是移动设备
    if (isset ($_SERVER['HTTP_X_WAP_PROFILE']))
    {
        return true;
    }
    // 如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
    if (isset ($_SERVER['HTTP_VIA']))
    {
        // 找不到为flase,否则为true
        return stristr($_SERVER['HTTP_VIA'], "wap") ? true : false;
    }
    // 脑残法,判断手机发送的客户端标志,兼容性有待提高
    if (isset ($_SERVER['HTTP_USER_AGENT']))
    {
        $clientkeywords = array ('nokia',
            'sony',
            'ericsson',
            'mot',
            'samsung',
            'htc',
            'sgh',
            'lg',
            'sharp',
            'sie-',
            'philips',
            'panasonic',
            'alcatel',
            'lenovo',
            'iphone',
            'ipod',
            'blackberry',
            'meizu',
            'android',
            'netfront',
            'symbian',
            'ucweb',
            'windowsce',
            'palm',
            'operamini',
            'operamobi',
            'openwave',
            'nexusone',
            'cldc',
            'midp',
            'wap',
            'mobile'
        );
        // 从HTTP_USER_AGENT中查找手机浏览器的关键字
        if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT'])))
        {
            return true;
        }
    }
    // 协议法,因为有可能不准确,放到最后判断
    if (isset ($_SERVER['HTTP_ACCEPT']))
    {
        // 如果只支持wml并且不支持html那一定是移动设备
        // 如果支持wml和html但是wml在html之前则是移动设备
        if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html'))))
        {
            return true;
        }
    }
    return false;
}
  • 跳转提醒

function web_jump($url=''){
    if(empty($url))$url = '/';
    echo " <body><script language = 'javascript' type = 'text/javascript' > ";
    echo " window.location.href = '$url' ";
    echo " </script ></body> ";
}
  • 获取URL里的参数数组

function getUrlParameter($url)
    {
        if (stripos($url, '?') !== false) {
            $uri_array = explode('?', $url);
            
            $p_array = explode('&', $uri_array[1]);
            foreach ($p_array as $k => $v) {
                if (!$v) {
                    unset($p_array[$k]);
                }
            }
            $newArr = array();
            foreach ($p_array as $v) {
                $t = explode('=', $v);
                $newArr[$t[0]] = $t[1];
            }
            return $newArr;
        }
    }
  • 去掉URL中的指定参数

function UrlUnsetParam($paramArray,$url) {
    if($paramArray){
        foreach ($paramArray as $val){
            $url	=	preg_replace(
                array("/{$val}=[^&]*/i", '/[&]+/', '/\?[&]+/', '/[?&]+$/',),
                array('', '&', '?','',),
                $url
            );
        }
    }
    return $url;
}
  • 获取referer_url

function getRefererUrl(){
    //return $_SERVER['HTTP_REFERER'];
    $referer = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . '?' . $_SERVER['QUERY_STRING'];
    return $referer;
}
  • 获取user_agent

function getUserAgent(){
    return $_SERVER["HTTP_USER_AGENT"];
}
  • 验证是否为URL

function checkUrl($url){
    return preg_match('/[a-z]+:\/\/[a-z0-9_\-\/.%]+/i',$url);
}
  • curl

function https_request($url, $data = null)
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    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;
}
function http_curl($url, $method='GET', $data='',$type=''){
    $curl = curl_init(); // 启动一个CURL会话
    curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 对认证证书来源的检查
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在
//    curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
    curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
    if($type=='JSON'){
        curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=UTF-8'));
    }
    if($method=='POST'){
        curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
        if($type='file'){
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }else{
            if ($data != ''){
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包
            }
        }
    }
    curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
    curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回

    $tmpInfo = curl_exec($curl); // 执行操作
//    if($tmpInfo === false){
//        echo curl_errno($curl);//输出错误信息
//        exit();
//    }
    curl_close($curl); // 关闭CURL会话
    return $tmpInfo; // 返回数据
}
  • URL base64编码

/**
 * URL base64编码
 * '+' -> '-'
 * '/' -> '_'
 * '=' -> ''
 * @param unknown $string
 */
function urlsafe_b64encode($string) {
    $data = base64_encode($string);
    $data = str_replace(array('+','/','='),array('-','_',''),$data);
    return $data;
}
  • 获取客户端浏览器以及版本号

function getClientBrowser($agent = '') {
    $browser = '';
    $browser_ver = '';
    if (preg_match('/OmniWeb\/(v*)([^\s|;]+)/i', $agent, $regs)) {
        $browser = 'OmniWeb';
        $browser_ver = $regs[2];
    }
    if (preg_match('/Netscape([\d]*)\/([^\s]+)/i', $agent, $regs)) {
        $browser = 'Netscape';
        $browser_ver = $regs[2];
    }
    if (preg_match('/safari\/([^\s]+)/i', $agent, $regs)) {
        $browser = 'Safari';
        $browser_ver = $regs[1];
    }
    if (preg_match('/MSIE\s([^\s|;]+)/i', $agent, $regs)) {
        $browser = 'Internet Explorer';
        $browser_ver = $regs[1];
    }
    if (preg_match('/Opera[\s|\/]([^\s]+)/i', $agent, $regs)) {
        $browser = 'Opera';
        $browser_ver = $regs[1];
    }
    if (preg_match('/NetCaptor\s([^\s|;]+)/i', $agent, $regs)) {
        $browser = '(Internet Explorer '.$browser_ver.') NetCaptor';
        $browser_ver = $regs[1];
    }
    if (preg_match('/Maxthon/i', $agent, $regs)) {
        $browser = '(Internet Explorer '.$browser_ver.') Maxthon';
        $browser_ver = '';
    }
    if (preg_match('/360SE/i', $agent, $regs)) {
        $browser = '(Internet Explorer '.$browser_ver.') 360SE';
        $browser_ver = '';
    }
    if (preg_match('/SE 2.x/i', $agent, $regs)) {
        $browser = '(Internet Explorer '.$browser_ver.') 搜狗';
        $browser_ver = '';
    }
    if (preg_match('/FireFox\/([^\s]+)/i', $agent, $regs)) {
        $browser = 'FireFox';
        $browser_ver = $regs[1];
    }
    if (preg_match('/Lynx\/([^\s]+)/i', $agent, $regs)) {
        $browser = 'Lynx';
        $browser_ver = $regs[1];
    }
    if (preg_match('/Chrome\/([^\s]+)/i', $agent, $regs)) {
        $browser = 'Chrome';
        $browser_ver = $regs[1];
    }
    if (preg_match('/MicroMessenger\/([^\s]+)/i', $agent, $regs)) {
        $browser = '微信浏览器';
        $browser_ver = $regs[1];
    }
    if ($browser != '') {
        return ['browser'=>$browser, 'browser_ver'=>$browser_ver];
    } else {
        return ['browser'=>'未知','browser_ver'=> ''];
    }
}
  • 蜘蛛抓取

function robots(){
    $useragent = addslashes(strtolower($_SERVER['HTTP_USER_AGENT']));
    if (strpos($useragent, 'googlebot')!== false){$bot = 'Google';}
    elseif (strpos($useragent,'mediapartners-google') !== false){$bot = 'Google Adsense';}
    elseif (strpos($useragent,'baiduspider') !== false){$bot = 'Baidu';}
    elseif (strpos($useragent,'sogou spider') !== false){$bot = 'Sogou';}
    elseif (strpos($useragent,'sogou web') !== false){$bot = 'Sogou web';}
    elseif (strpos($useragent,'sosospider') !== false){$bot = 'SOSO';}
    elseif (strpos($useragent,'360spider') !== false){$bot = '360Spider';}
    elseif (strpos($useragent,'haosou') !== false){$bot = 'haosou';}
    elseif (strpos($useragent,'yahoo') !== false){$bot = 'Yahoo';}
    elseif (strpos($useragent,'msn') !== false){$bot = 'MSN';}
    elseif (strpos($useragent,'msnbot') !== false){$bot = 'msnbot';}
    elseif (strpos($useragent,'sohu') !== false){$bot = 'Sohu';}
    elseif (strpos($useragent,'yodaoBot') !== false){$bot = 'Yodao';}
    elseif (strpos($useragent,'twiceler') !== false){$bot = 'Twiceler';}
    elseif (strpos($useragent,'ia_archiver') !== false){$bot = 'Alexa_';}
    elseif (strpos($useragent,'iaarchiver') !== false){$bot = 'Alexa';}
    elseif (strpos($useragent,'slurp') !== false){$bot = '雅虎';}
    elseif (strpos($useragent,'bot') !== false){$bot = $useragent;}
    if(isset($bot)){
        return array('date'=>date('Y-m-d H:i:s'),'ip'=>$_SERVER["REMOTE_ADDR"],'spider'=>$bot,'url'=>$_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"]);
    }
}

json处理

  • 中文json不转化直接输出

 function json_encode_ex($value)
    {
        if (version_compare(PHP_VERSION, '5.4.0', '<')) {
            $str = json_encode($value);
            $str = preg_replace_callback(
                "#\\\u([0-9a-f]{4})#i",
                function ($matchs) {
                    return iconv('UCS-2BE', 'UTF-8', pack('H4', $matchs[1]));
                },
                $str
            );
            return $str;
        } else {
            return json_encode($value, JSON_UNESCAPED_UNICODE);
        }
    }
  • 解析json串

function analyJson($json_str)
    {
        
        $json_str = str_replace('\\', '', $json_str);
        
        $out_arr = array();
        
        preg_match('/{.*}/', $json_str, $out_arr);
        
        if (!empty($out_arr)) {
            
            $result = json_decode($out_arr[0], TRUE);
            
        } else {
            
            return FALSE;
            
        }
        
        return $result;
    }
  • 中文json不转化直接输出

function json_encode_ex($value)
{
    if (version_compare(PHP_VERSION,'5.4.0','<'))
    {
        $str = json_encode($value);
        $str =  preg_replace_callback(
            "#\\\u([0-9a-f]{4})#i",
            function( $matchs)
            {
                return  iconv('UCS-2BE', 'UTF-8',  pack('H4',  $matchs[1]));
            },
            $str
        );
        return  $str;
    }
    else
    {
        return json_encode( $value, JSON_UNESCAPED_UNICODE);
    }
}
  • json解析

function json_encrypt($str)
{
    $str = trim($str,'{}');
    $str = str_replace('\"',"^",$str);
    $str = str_replace('"',"",$str);
    $str = '['.str_replace('^','"',$str).']';

    return json_decode($str,true);
}
  • 跨域调用返回json

function JSONENCODE($data){
    $callback	=	isset($_GET['callback'])?$_GET['callback']:'';
    $data		=	json_encode($data);
    if($callback){
        $data	=	$callback . "(". $data . ")";
    }
    return $data;
}

//跨域调用返回json-返回的数据中中文不进行json编码
function JSONENCODEEX($data){
    $callback	=	$_GET['callback'];
    $data		=	json_encode_ex($data);
    if($callback){
        $data	=	$callback . "(". $data . ")";
    }
    return $data;
}
  • 生成json(不进行转义)

function json_encode_ex($value)
{
	if (version_compare(PHP_VERSION,'5.4.0','<'))
	{
		$str = json_encode($value);
		$str =  preg_replace_callback(
				"#\\\u([0-9a-f]{4})#i",
				function( $matchs)
				{
					return  iconv('UCS-2BE', 'UTF-8',  pack('H4',  $matchs[1]));
				},
				$str
		);
		return  $str;
	}
	else
	{
		return json_encode( $value, JSON_UNESCAPED_UNICODE);
	}
}

数组处理

  • 二维数组转一维数组

function arr_tree($data = [])
    {
        $arrdata = array();
        
        foreach ($data as $key => $value) {
            
            foreach ($value as $va) {
                
                $arrdata[] = $va;
                
            }
            
        }
        
        return $arrdata;
    }
  • 二维数组去重

function arr_duplicate_removal($arr)
    {
        $serializeArrs = array_map('serialize', $arr);
        $uniqueArrs = array_unique($serializeArrs);
        $unserializeArrs = array_map('unserialize', $uniqueArrs);
        return $unserializeArrs;
    }
  • 根据指定值获取指定数组
function filter_by_value($array, $index, $value)
    {
        $newarray = array();
        if (is_array($array) && count($array) > 0) {
            foreach (array_keys($array) as $key) {
                $temp[$key] = $array[$key][$index];
                if ($temp[$key] == $value) {
                    $newarray[$key] = $array[$key];
                    foreach ($newarray as $k => $v) {
                        $newarray[$k] = $v;
                    }
                }
            }
        }
        return $newarray;
    }
  • 数组切割

/*
$arrF:数组
$user_count:分成几组
$group_num:每组多少个
*/
function array_group($arrF,$user_count,$group_num){
    for($i=0;$i<$user_count;$i++){
        if($i == $user_count-1){
            $arrT[] = array_slice($arrF, $i * $group_num );
        }else{
            $arrT[] = array_slice($arrF, $i * $group_num ,$group_num);
        }
    }
    return $arrT;
}
  • object转数组

function object_array($array) {
    if(is_object($array)) {
        $array = (array)$array;
    }
    if(is_array($array)) {
        foreach($array as $key=>$value) {
            $array[$key] = object_array($value);
        }
    }
    return $array;
}
  • 按照键值把数组分类

function group_same_key($arr,$key){
    $new_arr = array();
    foreach($arr as $k=>$v ){
        $new_arr[$v[$key]][] = $v;
    }
    return $new_arr;
}
  • 无限极递归分类

function getTree($array, $pid =0, $level = 0)
{
    //声明静态数组,避免递归调用时,多次声明导致数组覆盖
    static $list = [];
 
    foreach ($array as $key => $value) {
        //第一次遍历,找到父节点为根节点的节点 也就是pid=0的节点
        if ($value['pid'] == $pid) {
            //父节点为根节点的节点,级别为0,也就是第一级
            $value['level'] = $level;
            //把数组放到list中
            $list[] = $value;
            //把这个节点从数组中移除,减少后续递归内存消耗
            unset($array[$key]);
            //递归调用
            getTree($array, $value['id'], $level+1);
        }
    }
    return $list;
}

地理位置相关

  • 根据ip获取地理位置

function get_address($ip){
    $result = json_decode(file_get_contents('http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip='.$ip.'&format=json'));
    $province = isset($result->province) ? $result->province : '';
    $city = isset($result->city) ? $result->city : '';
    return $province.$city;
}
  • 根据经纬度计算距离

function getdistance($lng1,$lat1,$lng2,$lat2){//根据经纬度计算距离 单位为公里
    //将角度转为狐度
    $radLat1=deg2rad((float)$lat1);
    $radLat2=deg2rad((float)$lat2);
    $radLng1=deg2rad((float)$lng1);
    $radLng2=deg2rad((float)$lng2);
    $a=$radLat1-$radLat2;//两纬度之差,纬度<90
    $b=$radLng1-$radLng2;//两经度之差纬度<180
    $s=2*asin(sqrt(pow(sin($a/2),2)+cos($radLat1)*cos($radLat2)*pow(sin($b/2),2)))*6378.137;
    return $s;
}
  • 获取客户端ip

function getip()
    {
        $clientip = '';
        if (getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
            $clientip = getenv('HTTP_CLIENT_IP');
        } elseif (getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
            $clientip = getenv('HTTP_X_FORWARDED_FOR');
        } elseif (getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
            $clientip = getenv('REMOTE_ADDR');
        } elseif (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
            $clientip = $_SERVER['REMOTE_ADDR'];
        }
        preg_match("/[\d\.]{7,15}/", $clientip, $clientipmatches);
        $clientip = $clientipmatches[0] ? $clientipmatches[0] : 'unknown';
        return $clientip;
    }

其他

  • 抽奖

function get_rand2($proArr) {    
        $num = count($proArr);
        for($i = 0; $i < $num; $i++) { 
            $arr[$i] = $i == 0 ? $proArr[$i]['v'] : $proArr[$i]['v'] + $arr[$i-1]; 
        } 
        // var_dump($arr); //$arr  对等各等级奖及之前的中奖概率之和
         
        $proSum = $arr[$num-1] * 100; //为更公平,扩大一下范围       
        $randNum = mt_rand(1, $proSum) % $arr[$num-1] + 1;  //$randNum 一定不大于 $arr[$num-1] 抽奖仅需一次即可
        // 概率数组循环   
        foreach ($arr as $k => $v) {   
              
            if ($randNum <= $v) {   
                $result = $proArr[$k];   
                break;   
            }        
        }     
        return $result;   
}
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于PHP代码封装的问题,我可以给您一些建议和示例。 在PHP中,代码封装通常是指将一些常用的、重复性的代码封装成函数或类,方便在程序中进行调用和使用。通过封装,我们可以提高代码的复用性和可维护性,同时也可以提高程序的执行效率和安全性。 下面是一个简单的PHP代码封装的示例,假设我们需要在程序中获取当前页面的URL地址: ```php function get_current_url() { $url = 'http'; if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) { $url .= 's'; } $url .= '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; return $url; } ``` 在上面的代码中,我们定义了一个名为get_current_url()的函数,用于获取当前页面的URL地址。该函数通过判断当前页面是否使用了HTTPS协议,然后拼接出相应的URL地址并返回。 在程序中使用该函数时,只需要简单地调用即可: ```php $current_url = get_current_url(); echo $current_url; ``` 通过封装,我们可以避免在程序中多次重复编写获取当前页面URL地址的代码,提高了代码的复用性和可维护性。 除了函数封装外,我们还可以使用类的方式进行代码封装。类封装的方式通常适用于需要进行复杂操作和状态管理的场景,比如数据库操作、文件处理等。下面是一个简单的数据库操作类的示例: ```php class Database { private $host; private $user; private $password; private $database; private $connection; public function __construct($host, $user, $password, $database) { $this->host = $host; $this->user = $user; $this->password = $password; $this->database = $database; $this->connect(); } public function connect() { $this->connection = mysqli_connect($this->host, $this->user, $this->password, $this->database); if (!$this->connection) { die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error()); } } public function query($sql) { $result = mysqli_query($this->connection, $sql); if (!$result) { die('Query Error (' . mysqli_errno($this->connection) . ') ' . mysqli_error($this->connection)); } return $result; } public function close() { mysqli_close($this->connection); } } ``` 在上面的代码中,我们定义了一个名为Database的类,用于进行数据库连接和查询操作。该类包含了一些私有属性和公有方法,其中构造函数用于初始化数据库连接参数,connect()方法用于连接数据库,query()方法用于执行SQL语句,close()方法用于关闭数据库连接。 在程序中使用该类时,只需要简单地进行实例化和调用即可: ```php $db = new Database('localhost', 'username', 'password', 'database'); $result = $db->query('SELECT * FROM table'); while ($row = mysqli_fetch_assoc($result)) { // do something with $row } $db->close(); ``` 通过类的方式进行代码封装,我们可以将数据库操作的相关代码封装在一起,方便进行调用和管理,并且可以提高程序的安全性和可维护性。 总之,代码封装是一个非常重要的开发原则,通过封装可以提高代码的复用性、可维护性和安全性,建议在日常开发中多加使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值