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

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

你可能感兴趣的:(PHP常用的一些公共函数(持续更新))