PHP常用的一些公共函数(持续更新)

  1. <?php  
  2. // 应用公共文件  
  3.   
  4. // =================================新加入=====================================  
  5.   
  6. function getIP()  
  7. {  
  8.     static $realip;  
  9.     if (isset($_SERVER)){  
  10.         if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){  
  11.             $realip = $_SERVER["HTTP_X_FORWARDED_FOR"];  
  12.         } else if (isset($_SERVER["HTTP_CLIENT_IP"])) {  
  13.             $realip = $_SERVER["HTTP_CLIENT_IP"];  
  14.         } else {  
  15.             $realip = $_SERVER["REMOTE_ADDR"];  
  16.         }  
  17.     } else {  
  18.         if (getenv("HTTP_X_FORWARDED_FOR")){  
  19.             $realip = getenv("HTTP_X_FORWARDED_FOR");  
  20.         } else if (getenv("HTTP_CLIENT_IP")) {  
  21.             $realip = getenv("HTTP_CLIENT_IP");  
  22.         } else {  
  23.             $realip = getenv("REMOTE_ADDR");  
  24.         }  
  25.     }  
  26.     return $realip;  
  27. }  
  28.   
  29. function getCity($ip = '')  
  30. {  
  31.     if($ip == ''){  
  32.         $url = "http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json";  
  33.         $ip=json_decode(file_get_contents($url),true);  
  34.         $data = $ip;  
  35.     }else{  
  36.         $url="http://ip.taobao.com/service/getIpInfo.php?ip=".$ip;  
  37.         $ip=json_decode(file_get_contents($url));     
  38.         if((string)$ip->code=='1'){  
  39.            return false;  
  40.         }  
  41.         $data = (array)$ip->data;  
  42.     }  
  43.       
  44.     return $data;     
  45. }  
  46.   
  47. /*===================================================== 
  48.  * 说明:手机号 隐藏 by:Simon 
  49.  *====================================================*/  
  50. function mobile_phone_hidden($phone)  
  51. {  
  52.     $is_what = preg_match('/(0[0-9]{2,3}[\-]?[2-9][0-9]{6,7}[\-]?[0-9]?)/i',$phone); //固定电话  
  53.     if($is_what == 1)  
  54.         return preg_replace('/(0[0-9]{2,3}[\-]?[2-9])[0-9]{3,4}([0-9]{3}[\-]?[0-9]?)/i','$1****$2',$phone);  
  55.     else  
  56.         return  preg_replace('/(1[358]{1}[0-9])[0-9]{4}([0-9]{4})/i','$1****$2',$phone);  
  57. }  
  58.   
  59. /*===================================================== 
  60.  * 说明:身份证号 隐藏 by:Simon 
  61.  *====================================================*/  
  62. function id_card_hidden($idcard)  
  63. {  
  64.     $length = strlen($idcard);  
  65.     $calcLength = $length - 4 - 4;  
  66.     return substr_replace($idcardstr_repeat('*',$calcLength), 4, $calcLength);  
  67. }  
  68.   
  69. /*===================================================== 
  70.  * 说明:银行卡 隐藏 by:Simon 
  71.  *====================================================*/  
  72. function id_bank_card_hidden($card)  
  73. {  
  74.     $length = strlen($card);  
  75.     $calcLength = $length - 4 - 4;  
  76.     return substr_replace($cardstr_repeat('*',$calcLength), 4, $calcLength);  
  77. }  
  78.   
  79. /*===================================================== 
  80.  * 说明:获取当前日期 by:Simon 
  81.  *====================================================*/  
  82. function datetime()  
  83. {  
  84.     return date('Y-m-d H:i:s', time());  
  85. }  
  86.   
  87. /*===================================================== 
  88.  * 函数:http_post_query 
  89.  * 说明:http请求 by:Simon 
  90. ====================================================*/  
  91. function http_post_query($url$data)  
  92. {  
  93.   
  94.     $postdata = http_build_query($data);  
  95.   
  96.     $opts = array('http' =>  
  97.         array(  
  98.             'method'  => 'POST',  
  99.             'header'  => 'Content-type: application/x-www-form-urlencoded',  
  100.             'content' => $postdata  
  101.         )  
  102.     );  
  103.     $context = stream_context_create($opts);  
  104.     $result  = file_get_contents($url, false, $context);  
  105.   
  106.     return $result;  
  107. }  
  108.   
  109. // =================================原始加入=====================================  
  110.   
  111. /** 
  112.  * 判断手机号码是否合法 
  113.  * @param $mobile 手机号码 
  114.  * @return bool 
  115.  */  
  116. function check_mobile($mobile)  
  117. {  
  118.     // $pattern = '/^(1(([35][0-9])|(47)|[8][0126789]))\d{8}$/';  
  119.     $pattern = '/^(0|86|17951)?(888|13[0-9]|15[012356789]|17[0-9]|111|18[0-9]|14[57])[0-9]{8}$/';  
  120.   
  121.     if (preg_match($pattern$mobile)) {  
  122.         return TRUE;  
  123.     } else {  
  124.         return FALSE;  
  125.     }  
  126. }  
  127.   
  128. /** 
  129.  * 判断邮箱地址是否合法 
  130.  * @param $email 
  131.  * @return bool 
  132.  */  
  133. function checkEmail($email)  
  134. {  
  135.     $pattern = "/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i";  
  136.     if (preg_match($pattern$email)) {  
  137.         return TRUE;  
  138.     } else {  
  139.         return FALSE;  
  140.     }  
  141. }  
  142.   
  143. /** 
  144.  * 判断用户名是否合法 
  145.  * @param $name 小写字母开头,只能包含小写字母3-16位 
  146.  * @return bool 
  147.  */  
  148. function checkUsername($name)  
  149. {  
  150.     $patten = '/^[a-z]{3,12}$/';  
  151.     if (preg_match($patten$name)) {  
  152.         return TRUE;  
  153.     } else {  
  154.         return FALSE;  
  155.     }  
  156. }  
  157.   
  158. /** 
  159.  * 判断真实姓名是否合法 
  160.  * @param $realname 
  161.  * @return bool 
  162.  */  
  163. function checkRealname($realname)  
  164. {  
  165.     $patten = '/^[\x{4e00}-\x{9fa5}]+$/u';  
  166.     if (preg_match($patten$realname)) {  
  167.         return TRUE;  
  168.     } else {  
  169.         return FALSE;  
  170.     }  
  171. }  
  172.   
  173. /** 
  174.  * 判断IP地址是否合法 
  175.  * @param $ip 
  176.  * @return bool 
  177.  */  
  178. function checkIP($ip)  
  179. {  
  180.     $patten = "/^(((1?\d{1,2})|(2[0-4]\d)|(25[0-5]))\.){3}((1?\d{1,2})|(2[0-4]\d)|(25[0-5]))$/";  
  181.     if (preg_match($patten$ip)) {  
  182.         return true;  
  183.     } else {  
  184.         return false;  
  185.     }  
  186. }  
  187.   
  188. /** 
  189.  * 格式化打印数据 
  190.  * @param $data 
  191.  * @param bool $ext 
  192.  */  
  193. function pr($data$ext = false)  
  194. {  
  195.     //header("Content-type:text/html;charset=utf-8");  
  196.     echo '<pre>';  
  197.     print_r($data);  
  198.     echo '</pre>';  
  199.     if ($ext) {  
  200.         exit;  
  201.     }  
  202. }  
  203.   
  204. /** 
  205.  * 格式化打印数据 
  206.  * @param $data 
  207.  * @param bool $ext 
  208.  * @auther dengqihua 
  209.  */  
  210. function __print_r($data$ext = false)  
  211. {  
  212.     //header("Content-type:text/html;charset=utf-8");  
  213.     echo '<pre>';  
  214.     print_r($data);  
  215.     echo '</pre>';  
  216.     if ($ext) {  
  217.         exit;  
  218.     }  
  219. }  
  220.   
  221. /** 
  222.  * 数组层级缩进转换 
  223.  * @param array $array 
  224.  * @param int $pid 
  225.  * @param int $level 
  226.  * @return array 
  227.  */  
  228. function array2level($array$pid = 0, $level = 1, &$result = [])  
  229. {  
  230.     //static $list = [];  
  231.     foreach ($array as $v) {  
  232.         if ($v['parent_id'] == $pid) {  
  233.             $v['level'] = $level;  
  234.             $result[]     = $v;  
  235.             array2level($array$v['id'], $level + 1, $result);  
  236.         }  
  237.     }  
  238.     return $result;  
  239. }  
  240.   
  241.   
  242. /** 
  243.  * 构建层级(树状)数组 
  244.  * @param array $array 要进行处理的一维数组,经过该函数处理后,该数组自动转为树状数组 
  245.  * @param string $pid 父级ID的字段名 
  246.  * @param string $child_key_name 子元素键名 
  247.  * @return array|bool 
  248.  */  
  249. function array2tree(&$array$pid = 'parent_id'$child_key_name = 'children')  
  250. {  
  251.     $counter = array_children_count($array$pid);  
  252.     if ($counter[0] == 0)  
  253.         return false;  
  254.     $tree = [];  
  255.     while (isset($counter[0]) && $counter[0] > 0) {  
  256.         $temp = array_shift($array);  
  257.         if (isset($counter[$temp['id']]) && $counter[$temp['id']] > 0) {  
  258.             array_push($array$temp);  
  259.         } else {  
  260.             if ($temp[$pid] == 0) {  
  261.                 $tree[] = $temp;  
  262.             } else {  
  263.                 $array = array_child_append($array$temp[$pid], $temp$child_key_name);  
  264.             }  
  265.         }  
  266.         $counter = array_children_count($array$pid);  
  267.     }  
  268.   
  269.     return $tree;  
  270. }  
  271.   
  272. /** 
  273.  * 子元素计数器 
  274.  * @param $array 
  275.  * @param $pid 
  276.  * @return array 
  277.  */  
  278. function array_children_count($array$pid)  
  279. {  
  280.     $counter = [];  
  281.     foreach ($array as $item) {  
  282.         $count = isset($counter[$item[$pid]]) ? $counter[$item[$pid]] : 0;  
  283.         $count++;  
  284.         $counter[$item[$pid]] = $count;  
  285.     }  
  286.   
  287.     return $counter;  
  288. }  
  289.   
  290. /** 
  291.  * 把元素插入到对应的父元素$child_key_name字段 
  292.  * @param        $parent 
  293.  * @param        $pid 
  294.  * @param        $child 
  295.  * @param string $child_key_name 子元素键名 
  296.  * @return mixed 
  297.  */  
  298. function array_child_append($parent$pid$child$child_key_name)  
  299. {  
  300.     foreach ($parent as &$item) {  
  301.         if ($item['id'] == $pid) {  
  302.             if (!isset($item[$child_key_name]))  
  303.                 $item[$child_key_name] = [];  
  304.             $item[$child_key_name][] = $child;  
  305.         }  
  306.     }  
  307.   
  308.     return $parent;  
  309. }  
  310.   
  311. /** 
  312.  * 获取客户端浏览器信息 
  313.  * @param $agent 
  314.  * @return string 
  315.  */  
  316. function getBrowser($agent)  
  317. {  
  318.     $browser     = '';  
  319.     $browser_ver = '';  
  320.   
  321.     if (preg_match('/OmniWeb\/(v*)([^\s|;]+)/i'$agent$regs)) {  
  322.         $browser     = 'OmniWeb';  
  323.         $browser_ver = $regs[2];  
  324.     }  
  325.   
  326.     if (preg_match('/Netscape([\d]*)\/([^\s]+)/i'$agent$regs)) {  
  327.         $browser     = 'Netscape';  
  328.         $browser_ver = $regs[2];  
  329.     }  
  330.   
  331.     if (preg_match('/safari\/([^\s]+)/i'$agent$regs)) {  
  332.         $browser     = 'Safari';  
  333.         $browser_ver = $regs[1];  
  334.     }  
  335.   
  336.     if (preg_match('/MSIE\s([^\s|;]+)/i'$agent$regs)) {  
  337.         $browser     = 'Internet Explorer';  
  338.         $browser_ver = $regs[1];  
  339.     }  
  340.   
  341.     if (preg_match('/rv:([^\s|)]+)/i'$agent$regs)) {  
  342.         $browser     = 'Internet Explorer';  
  343.         $browser_ver = $regs[1];  
  344.     }  
  345.   
  346.     if (preg_match('/Opera[\s|\/]([^\s]+)/i'$agent$regs)) {  
  347.         $browser     = 'Opera';  
  348.         $browser_ver = $regs[1];  
  349.     }  
  350.   
  351.     if (preg_match('/NetCaptor\s([^\s|;]+)/i'$agent$regs)) {  
  352.         $browser     = '(Internet Explorer ' . $browser_ver . ') NetCaptor';  
  353.         $browser_ver = $regs[1];  
  354.     }  
  355.   
  356.     if (preg_match('/Maxthon/i'$agent$regs)) {  
  357.         $browser     = '(Internet Explorer ' . $browser_ver . ') Maxthon';  
  358.         $browser_ver = '';  
  359.     }  
  360.     if (preg_match('/360SE/i'$agent$regs)) {  
  361.         $browser     = '(Internet Explorer ' . $browser_ver . ') 360SE';  
  362.         $browser_ver = '';  
  363.     }  
  364.     if (preg_match('/SE 2.x/i'$agent$regs)) {  
  365.         $browser     = '(Internet Explorer ' . $browser_ver . ') 搜狗';  
  366.         $browser_ver = '';  
  367.     }  
  368.   
  369.     if (preg_match('/FireFox\/([^\s]+)/i'$agent$regs)) {  
  370.         $browser     = 'FireFox';  
  371.         $browser_ver = $regs[1];  
  372.     }  
  373.   
  374.     if (preg_match('/Lynx\/([^\s]+)/i'$agent$regs)) {  
  375.         $browser     = 'Lynx';  
  376.         $browser_ver = $regs[1];  
  377.     }  
  378.   
  379.     if (preg_match('/Chrome\/([^\s]+)/i'$agent$regs)) {  
  380.         $browser     = 'Chrome';  
  381.         $browser_ver = $regs[1];  
  382.   
  383.     }  
  384.   
  385.     if ($browser != '') {  
  386.         return $browser . ' ' . $browser_ver;  
  387.     } else {  
  388.         return '未知浏览器';  
  389.     }  
  390. }  
  391.   
  392. /** 
  393.  * 获取客户端操作系统信息 
  394.  * @param $agent 
  395.  * @return bool|string 
  396.  */  
  397. function getOs($agent)  
  398. {  
  399.     $os = false;  
  400.   
  401.     if(preg_match('/win/i'$agent) && preg_match('/nt 6.0/i'$agent)) {  
  402.         $os = 'Windows Vista';  
  403.     } else if (preg_match('/win/i'$agent) && preg_match('/nt 6.1/i'$agent)) {  
  404.         $os = 'Windows 7';  
  405.     } else if (preg_match('/win/i'$agent) && preg_match('/nt 6.2/i'$agent)) {  
  406.         $os = 'Windows 8';  
  407.     } else if (preg_match('/win/i'$agent) && preg_match('/nt 10.0/i'$agent)) {  
  408.         $os = 'Windows 10';#添加win10判断  
  409.     } else if (preg_match('/win/i'$agent) && preg_match('/nt 5.1/i'$agent)) {  
  410.         $os = 'Windows XP';  
  411.     } else if (preg_match('/win/i'$agent) && preg_match('/nt 5/i'$agent)) {  
  412.         $os = 'Windows 2000';  
  413.     } else if (preg_match('/win/i'$agent) && preg_match('/nt/i'$agent)) {  
  414.         $os = 'Windows NT';  
  415.     } else if (preg_match('/win/i'$agent) && preg_match('/32/i'$agent)) {  
  416.         $os = 'Windows 32';  
  417.     } else if (preg_match('/linux/i'$agent)) {  
  418.         $os = 'Linux';  
  419.     } else if (preg_match('/unix/i'$agent)) {  
  420.         $os = 'Unix';  
  421.     } else if (preg_match('/sun/i'$agent) && preg_match('/os/i'$agent)) {  
  422.         $os = 'SunOS';  
  423.     } else if (preg_match('/ibm/i'$agent) && preg_match('/os/i'$agent)) {  
  424.         $os = 'IBM OS/2';  
  425.     } else if (preg_match('/Mac/i'$agent) && preg_match('/PC/i'$agent)) {  
  426.         $os = 'Macintosh';  
  427.     } else if (preg_match('/PowerPC/i'$agent)) {  
  428.         $os = 'PowerPC';  
  429.     } else if (preg_match('/AIX/i'$agent)) {  
  430.         $os = 'AIX';  
  431.     } else if (preg_match('/HPUX/i'$agent)) {  
  432.         $os = 'HPUX';  
  433.     } else if (preg_match('/NetBSD/i'$agent)) {  
  434.         $os = 'NetBSD';  
  435.     } else if (preg_match('/BSD/i'$agent)) {  
  436.         $os = 'BSD';  
  437.     } else if (preg_match('/OSF1/i'$agent)) {  
  438.         $os = 'OSF1';  
  439.     } else if (preg_match('/IRIX/i'$agent)) {  
  440.         $os = 'IRIX';  
  441.     } else if (preg_match('/FreeBSD/i'$agent)) {  
  442.         $os = 'FreeBSD';  
  443.     } else if (preg_match('/teleport/i'$agent)) {  
  444.         $os = 'teleport';  
  445.     } else if (preg_match('/flashget/i'$agent)) {  
  446.         $os = 'flashget';  
  447.     } else if (preg_match('/webzip/i'$agent)) {  
  448.         $os = 'webzip';  
  449.     } else if (preg_match('/offline/i'$agent)) {  
  450.         $os = 'offline';  
  451.     } else {  
  452.         $os = '未知操作系统';  
  453.     }  
  454.     return $os;  
  455. }  
  456.   
  457. /** 
  458.  * 根据二维数组的某个字段进行排序 
  459.  * @param $multi_array 
  460.  * @param $sort_key 
  461.  * @param int $sort 
  462.  * @return bool 
  463.  */  
  464. function array_multi_sort($multi_array$sort_key$sort = SORT_DESC)  
  465. {  
  466.     if (is_array($multi_array)) {  
  467.         foreach ($multi_array as $row_array) {  
  468.             if (is_array($row_array)) {  
  469.                 $key_array[] = $row_array[$sort_key];  
  470.             } else {  
  471.                 return false;  
  472.             }  
  473.         }  
  474.     } else {  
  475.         return false;  
  476.     }  
  477.     array_multisort($key_array$sort$multi_array);  
  478.     return $multi_array;  
  479. }  
  480.   
  481. /** 
  482.  * httpPost请求 
  483.  * @param url 请求地址 
  484.  * @param data 请求参数(json) 
  485.  */  
  486. function post_json_response($url$data) {  
  487.     $ch = curl_init();  
  488.   
  489.     curl_setopt($ch, CURLOPT_POST, 1);  
  490.     curl_setopt($ch, CURLOPT_URL, $url);  
  491.     curl_setopt($ch, CURLOPT_POSTFIELDS, $data);  
  492.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
  493.     curl_setopt($ch, CURLOPT_HTTPHEADER, [  
  494.         'Content-Type: application/json; charset=utf-8',  
  495.         'Content-Length: ' . strlen($data)  
  496.     ]);  
  497.   
  498.     $response = curl_exec($ch);  
  499.     $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);  
  500.   
  501.     curl_close($ch);  
  502.   
  503.     return $response;  
  504. }  
  505.   
  506. function millisecond() {  
  507.     list($t1$t2) = explode(' ', microtime());  
  508.   
  509.     return (float)sprintf('%.0f', (floatval($t1) + floatval($t2)));  
  510. }  
  511.   
  512. /* 
  513. * api统一接口返回 
  514. * $code 状态码 
  515. * $res 返回数据结果集 (如果有) 
  516.  */  
  517. function json_api($code='00000000'$res=[], $codeMessage=[]){  
  518.   
  519.     $code = $code;  
  520.     $res = $res;  
  521.   
  522.     if($codeMessage != []){  
  523.         $returnMessageTpl = config('message.'.$code);  
  524. //        $return_msg = vprintf($returnMessageTpl, $codeMessage);  
  525.         $return_msg = sprintf($returnMessageTpl, ...$codeMessage);  
  526.     }else{  
  527.         $return_msg = config('message.'.$code);  
  528.     }  
  529.   
  530.     return json([  
  531.         'code' => $code,  
  532.         'msg'  => $return_msg,  
  533.         'res'  => $res  
  534.     ]);  
  535. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值