<?php
/**
* @desc 二维数组排序
* @date 2015-8-13 14:08:15
* @param
* @return arr
*/
function multi_array_sort($multi_array, $sort_key, $sort = SORT_ASC) {
if (is_array($multi_array)) {
foreach ($multi_array as $row_array) {
if (is_array($row_array)) {
$key_array[] = $row_array[$sort_key];
} else {
return false;
}
}
} else {
return false;
}
array_multisort($key_array, $sort, $multi_array);
return $multi_array;
}
/**
* 判断IP是否在某个网络内
* @param $ip
* @param $network
* @return bool
*/
function ip_in_network($ip, $network)
{
$ip = (double) (sprintf("%u", ip2long($ip)));
$s = explode('/', $network);
$network_start = (double) (sprintf("%u", ip2long($s[0])));
$network_len = pow(2, 32 - $s[1]);
$network_end = $network_start + $network_len - 1;
if ($ip >= $network_start && $ip <= $network_end)
{
return true;
}
return false;
}
}
//加密
function encrypt($data, $key)
{
$key = md5($key);
$x = 0;
$data = base64_decode($data);
$len = strlen($data);
$l = strlen($key);
for ($i = 0; $i < $len; $i++)
{
if ($x == $l)
{
$x = 0;
}
$char .= $key{$x};
$x++;
}
for ($i = 0; $i < $len; $i++)
{
$str .= chr(ord($data{$i}) + (ord($char{$i})) % 256);
}
return base64_encode($str);
}
//解密
function decrypt($data, $key)
{
$key = md5($key);
$x = 0;
$data = base64_decode($data);
$len = strlen($data);
$l = strlen($key);
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 $str;
}
/**
* 获得客户端真实的IP地址
* @return string
*/
function getClientIp() {
//****************************先考虑cdn****************************/
//网宿
if (isset($_SERVER["HTTP_CDN_SRC_IP"]) && !empty($_SERVER["HTTP_CDN_SRC_IP"]) && strtolower($_SERVER["HTTP_CDN_SRC_IP"]) != 'unknown') {
$_ip_string = $_SERVER['HTTP_CDN_SRC_IP'];
}
//cloudflare
if (isset($_SERVER["HTTP_CF_CONNECTING_IP"]) && !empty($_SERVER["HTTP_CF_CONNECTING_IP"]) && strtolower($_SERVER["HTTP_CF_CONNECTING_IP"]) != 'unknown') {
$_ip_string = $_SERVER["HTTP_CF_CONNECTING_IP"];
}
//incapsula
if (isset($_SERVER["HTTP_INCAP_CLIENT_IP"]) && !empty($_SERVER["HTTP_INCAP_CLIENT_IP"]) && strtolower($_SERVER["HTTP_INCAP_CLIENT_IP"]) != 'unknown') {
$_ip_string = $_SERVER["HTTP_INCAP_CLIENT_IP"];
}
//****************************判断cdn是否获取到IP,如果无就普通获取****************************/
if (!isset($_ip_string) || empty($_ip_string)) {
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"]) && !empty($_SERVER["HTTP_X_FORWARDED_FOR"]) && strtolower($_SERVER["HTTP_X_FORWARDED_FOR"]) != 'unknown') {
$_ip_string = $_SERVER["HTTP_X_FORWARDED_FOR"];
} elseif (isset($_SERVER["HTTP_X_FORWARD_FOR"]) && !empty($_SERVER["HTTP_X_FORWARD_FOR"]) && strtolower($_SERVER["HTTP_X_FORWARD_FOR"]) != 'unknown') {
$_ip_string = $_SERVER["HTTP_X_FORWARD_FOR"];
} elseif (isset($_SERVER["HTTP_CLIENT_IP"]) && !empty($_SERVER["HTTP_CLIENT_IP"]) && strtolower($_SERVER["HTTP_CLIENT_IP"]) != 'unknown') {
$_ip_string = $_SERVER["HTTP_CLIENT_IP"];
} elseif (isset($_SERVER["HTTP_X_REAL_IP"]) && !empty($_SERVER["HTTP_X_REAL_IP"]) && strtolower($_SERVER["HTTP_X_REAL_IP"]) != 'unknown') {
$_ip_string = $_SERVER["HTTP_X_REAL_IP"]; //nginx 代理模式下,获取客户端真实IP,百度用
} elseif (isset($_SERVER["REMOTE_ADDR"]) && !empty($_SERVER["REMOTE_ADDR"]) && strtolower($_SERVER["REMOTE_ADDR"]) != 'unknown') {
$_ip_string = $_SERVER["REMOTE_ADDR"];
} else {
$_ip_string = "127.0.0.1";
}
}
if (stristr($_ip_string, ',') != false) {
$ipArray = explode(',', $_ip_string);
$_ip_string = $ipArray[0];
}
return trim($_ip_string);
}
/**
* 获取已经过了多久
* PHP时间转换
* 刚刚、几分钟前、几小时前
* 今天昨天前天几天前
* @param string $targetTime 时间戳
* @return string
*/
function get_last_time($targetTime)
{
// 今天最大时间
$todayLast = strtotime(date('Y-m-d 23:59:59'));
$agoTimeTrue = time() - $targetTime;
$agoTime = $todayLast - $targetTime;
$agoDay = floor($agoTime / 86400);
if ($agoTimeTrue < 60) {
$result = '刚刚';
} elseif ($agoTimeTrue < 3600) {
$result = (ceil($agoTimeTrue / 60)) . '分钟前';
} elseif ($agoTimeTrue < 3600 * 12) {
$result = (ceil($agoTimeTrue / 3600)) . '小时前';
} elseif ($agoDay == 0) {
$result = '今天 ' . date('H:i', $targetTime);
} elseif ($agoDay == 1) {
$result = '昨天 ' . date('H:i', $targetTime);
} elseif ($agoDay == 2) {
$result = '前天 ' . date('H:i', $targetTime);
} elseif ($agoDay > 2 && $agoDay < 16) {
$result = $agoDay . '天前 ' . date('H:i', $targetTime);
} else {
$format = date('Y') != date('Y', $targetTime) ? "Y-m-d H:i" : "m-d H:i";
$result = date($format, $targetTime);
}
return $result;
}
//判断是否是手机端
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;
}
// 脑残法,判断手机发送的客户端标志,兼容性有待提高。其中'MicroMessenger'是电脑微信
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','MicroMessenger');
// 从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 isWeixin() {
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false) {
return true;
} else {
return false;
}
}
此文会持续更新。。。