PHP超实用的工具方法(copy拿来就用)

 

目录

生成UUID 单机使用

生成随机字符串

获取一定范围内的随机数字 位数不足补零

获取相对时间

图片地址转换base6

将查询的二维对象转换成二维数组

检查字符串是否是UTF8编码

构建随机IP地址

随机生成一个URL协议

获取客户端IP


生成UUID 单机使用

/**
 * 生成UUID 单机使用
 * @return string
 */
function uuid()
{
    $charId = md5(uniqid(strval(mt_rand()), true));
    $hyphen = chr(45);
    $uuid = chr(123)
        . substr($charId, 0, 8) . $hyphen
        . substr($charId, 8, 4) . $hyphen
        . substr($charId, 12, 4) . $hyphen
        . substr($charId, 16, 4) . $hyphen
        . substr($charId, 20, 12)
        . chr(125);
    return $uuid;
}

生成随机字符串

/**
 * 生成随机字符串
 * 默认长度6位 字母和数字混合
 * @param integer $len 长度
 * @param int $type 字串类型:0 大小写字母混合 1 数字 2 大写字母 3 小写字母 4 混合
 * @param string $addChars 额外字符
 * @return string
 */
function randString(int $len = 6, int $type = 0, string $addChars = '')
{
    $str = '';
    switch ($type) {
        case 0:
            $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' . $addChars;
            break;
        case 1:
            $chars = str_repeat('0123456789', 3);
            break;
        case 2:
            $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' . $addChars;
            break;
        case 3:
            $chars = 'abcdefghijklmnopqrstuvwxyz' . $addChars;
            break;
        case 4:
        default :
            //默认去掉了容易混淆的字符oOLl和数字01,要添加请使用addChars参数
            $chars = 'ABCDEFGHIJKMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789' . $addChars;
            break;
    }
    if ($len > 10) {//位数过长重复字符串一定次数
        $chars = $type == 1 ? str_repeat($chars, $len) : str_repeat($chars, 5);
    }
    $chars = str_shuffle($chars);
    $str = substr($chars, 0, $len);
    return $str;
}

获取一定范围内的随机数字 位数不足补零

/**
 * 获取一定范围内的随机数字 位数不足补零
 * @param integer $min 最小值
 * @param integer $max 最大值
 * @return string
 */
function randNumber(int $min, int $max)
{
    return sprintf("%0" . strlen($max) . "d", mt_rand($min, $max));
}

获取相对时间

/**
 * 获取相对时间
 * @param int $timestamp 10位时间戳
 * @return string
 */
function getDate(int $timestamp)
{
    $now = time();
    $diff = $now - $timestamp;
    if ($diff <= 60) {
        return $diff . '秒前';
    } elseif ($diff <= 3600) {
        return floor($diff / 60) . '分钟前';
    } elseif ($diff <= 86400) {
        return floor($diff / 3600) . '小时前';
    } elseif ($diff <= 2592000) {
        return floor($diff / 86400) . '天前';
    } else {
        return '一个月前';
    }
}

图片地址转换base6

/**
 * 将图片地址转为base64
 * @param string $img_url 图片url地址
 * @param bool $prefix 是否拼接前缀
 * @return string
 */
function ImageToBase64(string $img_url, bool $prefix = false)
{
    //将图片链接转换为base64
    $base64 = chunk_split(base64_encode(file_get_contents($img_url)));
    //是否需要拼接前缀,false返回base64
    if (!$prefix) return $base64;
    //获取图像信息,并拼接前缀
    $image_info = getimagesize($img_url);
    return 'data:' . $image_info['mime'] . ';base64,' . $base64;
}

将查询的二维对象转换成二维数组

/**
 * 将查询的二维对象转换成二维数组
 * @param $data
 * @param string $key 允许指定索引值
 * @return array
 */
function buildArrFromObj($data, string $key = '')
{
    $arr = [];
    foreach ($data as $value) {
        $value = $value->toArray();
        if ($key) {
            $arr[$value[$key]] = $value;
        } else {
            $arr[] = $value;
        }
    }
    return $arr;
}

检查字符串是否是UTF8编码

/**
 * 检查字符串是否是UTF8编码
 * @param $string 字符串
 * @return bool
 */
function isUtf8($string)
{
    $len = strlen($string);
    for ($i = 0; $i < $len; $i++) {
        $c = ord($string[$i]);
        if ($c > 128) {
            if (($c >= 254)) return false;
            elseif ($c >= 252) $bits = 6;
            elseif ($c >= 248) $bits = 5;
            elseif ($c >= 240) $bits = 4;
            elseif ($c >= 224) $bits = 3;
            elseif ($c >= 192) $bits = 2;
            else return false;
            if (($i + $bits) > $len) return false;
            while ($bits > 1) {
                $i++;
                $b = ord($string[$i]);
                if ($b < 128 || $b > 191) return false;
                $bits--;
            }
        }
    }
    return true;
}

构建随机IP地址


/**
 * 构建随机IP地址
 * @return string
 */
function randomIp()
{
    $ipLong = [
        ['607649792', '608174079'], // 36.56.0.0-36.63.255.255
        ['1038614528', '1039007743'], // 61.232.0.0-61.237.255.255
        ['1783627776', '1784676351'], // 106.80.0.0-106.95.255.255
        ['2035023872', '2035154943'], // 121.76.0.0-121.77.255.255
        ['2078801920', '2079064063'], // 123.232.0.0-123.235.255.255
        ['-1950089216', '-1948778497'], // 139.196.0.0-139.215.255.255
        ['-1425539072', '-1425014785'], // 171.8.0.0-171.15.255.255
        ['-1236271104', '-1235419137'], // 182.80.0.0-182.92.255.255
        ['-770113536', '-768606209'], // 210.25.0.0-210.47.255.255
        ['-569376768', '-564133889'], // 222.16.0.0-222.95.255.255
    ];
    $randKey = mt_rand(0, 9);

    return $ip = long2ip(mt_rand($ipLong[$randKey][0], $ipLong[$randKey][1]));
}

随机生成一个URL协议

/**
 * 随机生成一个URL协议
 * @return string
 */
function randomProtocol()
{
    $proArr = [
        'http',
        'ftp',
        'gopher',
        'mailto',
        'mid',
        'cid',
        'news',
        'nntp',
        'prospero',
        'telnet',
        'rlogin',
        'tn3270',
        'wais'
    ];
    shuffle($proArr);

    return $proArr[0];
}

获取客户端IP

/**
 * 获取客户端IP
 * @return mixed|string
 */
function getIp()
{
    $client_ip = '';
    if (isset($_SERVER)) {
        if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
            //优先使用 HTTP_X_FORWARDED_FOR,此值是一个逗号分割的多个IP
            //注意:我这里没做处理,是因为运维在入口处禁止了伪造请求头,HTTP_X_FORWARDED_FOR是可信的,不能代表所有业务场景
            //Todo 没有禁止伪造请求头下的特殊处理
            $ipStr = $_SERVER["HTTP_X_FORWARDED_FOR"];
            $ipArr = explode(',', $ipStr);
            $client_ip = isset($ipArr[0]) ? $ipArr[0] : '';
        } else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
            $client_ip = $_SERVER["HTTP_CLIENT_IP"];
        } else {
            $client_ip = $_SERVER["REMOTE_ADDR"];
        }
    }
    //过滤无效IP
    if (filter_var($client_ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false || filter_var($client_ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) !== false) {
        return $client_ip;
    } else {
        return $_SERVER["REMOTE_ADDR"];
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值