有用的函數

<?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;  
  } 
}

此文會持續更新。。。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章