PHP常用函数封装,待新增

本文汇总了一系列PHP常用函数,包括图片处理、数据生成、网络请求、文件操作、手机号验证等功能,为开发者提供便利。
<?php
/**
 * Created by PhpStorm.
 * User: yjh
 * Date: 2018/7/17 0017
 * Time: 上午 9:21
 */

//=================================== 目录 start =================================//
/*
一.[将Base64图片转换为本地图片并保存]
二.[打印]
三.[生成随机字符串]
四.[curl请求]
五.[PHP获取文件大小并格式化]
六.[PHP获取文件扩展名]
七.[获取手机号码归属地]
八.[获取客户端真实IP]
九.[返回十三位时间戳、精确到毫秒]
十.[极端情况下使用,如json_decode方法始终无法解析json串的情况]
十一.[将十六进制流$string转换成字符串]
十二.[把返回的数据集转换成树形结构Tree]
十三.[判断输入的字符串是否是一个合法的手机号(仅限中国大陆)]
十四.[隐藏手机号中间四位]
十五.[检查银行卡号是否合法]
十六.[将xml转为array]
十七.[数组转xml字符]
十八.[获取本周所有日期]
*/
//=================================== 目录 end =================================//
/**
 * 一.[将Base64图片转换为本地图片并保存]
 * @param string [Base64] $image [要保存的Base64]
 * @param string $prePath 传入路径前缀
 * @return String $imageSrc [图片保存路径]
 */
function base64ImageContent($image, $prePath = 'Upload/tmp/signImage/')
{
    $imageName = "25220_" . date("His", time()) . "_" . rand(1111, 9999) . '.png';
    if (strstr($image, ",")) {
        $image = explode(',', $image);
        $image = $image[1];
    }
    $path = $prePath . date("Ymd", time());
    if (!is_dir($path)) { //判断目录是否存在 不存在就创建
        mkdir($path, 0777, true);
    }
    $imageSrc = $path . "/" . $imageName;  //图片名字
    $r        = file_put_contents($imageSrc, base64_decode($image));//返回的是字节数
    if (!$r) {
        return false;
        //echo json_encode(['data'=>null,"code"=>1,"msg"=>"图片生成失败"],JSON_UNESCAPED_UNICODE);
    } else {
        return $imageSrc;
        //echo json_encode(['data'=>1,"code"=>0,"msg"=>"图片生成成功"],JSON_UNESCAPED_UNICODE);
    }
}

/**
 * 二.[打印]
 * @param $var .. 要打印的变量
 */
function pr($var)
{
    $template = PHP_SAPI !== 'cli' ? '<pre>%s</pre>' : "\n%s\n";
    printf($template, print_r($var, true));
}

/**
 * 三.[生成随机字符串]
 * @param  int $length 字符串的长度,默认16
 * @return  string $str 字符串
 */
function createNonceStr($length = 16)
{
    $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    $str   = "";
    for ($i = 0; $i < $length; $i++) {
        $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
    }
    return $str;
}

/**
 * 四.[curl请求]
 * @param string $url
 * @return Object $contents
 * */
function curl_http($url)
{
    $ch      = curl_init();
    $timeout = 5;
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $contents = curl_exec($ch);
    curl_close($ch);
    return $contents;
}

/**
 * 五.[PHP获取文件大小并格式化]
 * @param string $size 需要查询大小的文件路径
 * @return string 文件大小
 */
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]);
    }
}

/**
 * 六.[PHP获取文件扩展名]
 * @param string $filename 文件完整路径名
 * @return string $myExt 得到的后缀名
 */

function getExtension($filename)
{
    $myExt = substr($filename, strrpos($filename, '.'));
    return str_replace('.', '', $myExt);
}

/**
 * 七.[获取手机号码归属地]
 * @param $phone [手机号]
 * @return string [地址]
 */

function getMobileArea($phone)
{
    $sms = array('province' => '', 'supplier' => ''); //初始化变量
    //根据淘宝的数据库调用返回值
    $url             = "http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=" . $phone . "&t=" . time();
    $content         = file_get_contents($url);
    $sms['province'] = substr($content, "56", "4"); //截取字符串
    $sms['supplier'] = substr($content, "81", "4");
    $att             = $sms['province'] . $sms['supplier'];
    return $att;
}

/**
 * 八.[获取客户端真实IP]
 * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字
 * @param boolean $adv 是否进行高级模式获取(有可能被伪装)
 * @return mixed
 */
function getClientIp(int $type = 0, bool $adv = false)
{
    $type = $type ? 1 : 0;
    static $ip = NULL;
    if ($ip !== NULL) return $ip[$type];
    if ($adv) {
        if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
            $pos = array_search('unknown', $arr);
            if (false !== $pos) unset($arr[$pos]);
            $ip = trim($arr[0]);
        } elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
            $ip = $_SERVER['HTTP_CLIENT_IP'];
        } elseif (isset($_SERVER['REMOTE_ADDR'])) {
            $ip = $_SERVER['REMOTE_ADDR'];
        }
    } elseif (isset($_SERVER['REMOTE_ADDR'])) {
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    // IP地址合法验证
    $long = sprintf("%u", ip2long($ip));
    $ip   = $long ? array($ip, $long) : array('0.0.0.0', 0);
    return $ip[$type];
}

/**
 * 九.[返回十三位时间戳、精确到毫秒]
 * @return string
 */
function getMsectime()
{
    list($msec, $sec) = explode(' ', microtime());
    $msectime = (string)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
    return $msectime;
}

/**
 * 十.[极端情况下使用,如json_decode方法始终无法解析json串的情况]
 * @param $json
 * @return mixed
 */
function json_decode($json)
{
    $comment = false;
    $length  = strlen($json);
    $out     = '$x=';
    for ($i = 0; $i < $length; $i++) {
        if (!$comment) {
            if (($json[$i] === '{') || ($json[$i] === '['))
                $out .= ' array(';
            else if (($json[$i] === '}') || ($json[$i] === ']'))
                $out .= ')';
            else if ($json[$i] === ':')
                $out .= '=>';
            else $out .= $json[$i];
        } else {
            $out .= $json[$i];
        }
        if ($json[$i] === '"' && $json[($i - 1)] !== "\\") {
            $comment = !$comment;
        }
    }
    eval($out . ';');
    return $x;
}

/**
 * 十一.[将十六进制流$string转换成字符串]
 * @param string $string 需要转换的变量
 * @return string
 */
function fromHexString($string)
{
    $buf = "";
    for ($i = 0; $i < strlen($string); $i += 2) {
        $val = chr(hexdec(substr($string, $i, 2)));
        $buf .= $val;
    }
    return $buf;
}

/**
 * 十二.[把返回的数据集转换成树形结构Tree]
 * @param array  $list 要转换的数据集
 * @param string $pid 父级ID键名
 * @param string $pk ID键名
 * @param string $child 子集键名
 * @param int    $root 一级菜单的parent_id 的值 (默认 0)
 * @return array
 */
function listToTree($list, $pk = 'id', $pid = 'parent_id', $child = 'child', $root = 0)
{
    // 创建Tree
    $tree = array();
    if (is_array($list)) {
        // 创建基于主键的数组引用
        $refer = array();
        foreach ($list as $key => $data) {
            $refer[$data[$pk]] =& $list[$key];
        }
        foreach ($list as $key => $data) {
            // 判断是否存在parent
            $parentId = $data[$pid];
            if ($root == $parentId) {
                $tree[] =& $list[$key];
            } else {
                if (isset($refer[$parentId])) {
                    $parent           =& $refer[$parentId];
                    $parent[$child][] =& $list[$key];
                }
            }
        }
    }
    return $tree;
}

/**
 * 十三.[判断输入的字符串是否是一个合法的手机号(仅限中国大陆)]
 * @param string $string
 * @return boolean
 */

function isMobile($string)
{
    $len = strlen($string);
    if ($len > 11) {
        return false;
    }
    if (preg_match('/^[1]+[3,4,5,7,8]+\d{9}$/', $string)) {
        return true;
    }
    return false;
}

/**
 * 十四.[隐藏手机号中间四位]
 * @param string $mobile 需要隐藏的手机号
 * @return mixed
 */
function hideTel($mobile)
{
    return substr_replace($mobile, '****', 3, 4);
}

/**
 * 十五.[检查银行卡号是否合法]
 * @param string $id_number 需要检查的卡号
 * @return bool
 */
function checkIdNumber($id_number)
{
    if (preg_match('/^([1-9]{1})(\d{14}|\d{18})$/', $id_number)) {
        return true;
    } else {
        return false;
    }
}

/**
 * 十六.[将xml转为array]
 * @param  string $xml xml字符串或者xml文件名
 * @param  bool   $isFile 传入的是否是xml文件名
 * @return array    转换得到的数组
 */
function xmlToArray($xml, $isFile = false)
{
    //禁止引用外部xml实体
    libxml_disable_entity_loader(true);
    if ($isFile) {
        if (!file_exists($xml)) return false;
        $xmlStr = file_get_contents($xml);
    } else {
        $xmlStr = $xml;
    }
    $result = json_decode(json_encode(simplexml_load_string($xmlStr, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
    return $result;
}


/**
 * 十七.[数组转xml字符]
 * @param  array $data 需要转换的数组
 * @return string $xml
 **/
function arrayToXml($data)
{
    if (!is_array($data) || count($data) <= 0) {
        return false;
    }
    $xml = "<xml>";
    foreach ($data as $key => $val) {
        if (is_numeric($val)) {
            $xml .= "<" . $key . ">" . $val . "</" . $key . ">";
        } else {
            $xml .= "<" . $key . "><![CDATA[" . $val . "]]></" . $key . ">";
        }
    }
    $xml .= "</xml>";
    return $xml;
}

/**
 * 十八.[获取本周所有日期]
 * @param  string $time  时间戳
 * @param  string $format 格式
 * @return mixed
 */
function getWeek($time = '', $format = 'Ymd')
{
    $time = $time != '' ? $time : time();
    //获取当前周几
    $week = date('w', $time);
    $date = [];
    for ($i = 1; $i <= 7; $i++) {
        $date[$i] = date($format, strtotime('+' . $i - $week . ' days', $time));
    }
    return $date;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值