代码

这里主要展示一些常用的代码,希望对你有帮助!

PHP

获取用户真实 IP 地址

/**
 * 获取用户真实IP地址
 * @return [type] [description]
 */
function getIp(){
       if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
           $ip = getenv("HTTP_CLIENT_IP");
       else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
          $ip = getenv("HTTP_X_FORWARDED_FOR");
      else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
           $ip = getenv("REMOTE_ADDR");
      else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
        $ip = $_SERVER['REMOTE_ADDR'];
    else
        $ip = "unknown";
    return($ip);
 }

使用 curl 实现 post 请求

/**
     * 模拟POST提交
     * @param string $url 地址
     * @param string $data 提交的数据
     * @return string 返回结果
     */
    function post_url($url, $data)
    {
        $curl = curl_init(); // 启动一个CURL会话
        curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在
        curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)'); // 模拟用户使用的浏览器
        //curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
        //curl_setopt($curl, CURLOPT_AUTOREFERER, 1);    // 自动设置Referer
        curl_setopt($curl, CURLOPT_POST, 1);             // 发送一个常规的Post请求
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);   // Post提交的数据包x
        curl_setopt($curl, CURLOPT_TIMEOUT, 30);         // 设置超时限制 防止死循环
        curl_setopt($curl, CURLOPT_HEADER, 0);           // 显示返回的Header区域内容
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);   // 获取的信息以文件流的形式返回
        $tmpInfo = curl_exec($curl); // 执行操作
        if(curl_errno($curl))
        {
            echo 'Errno'.curl_error($curl);//捕抓异常
        }
        curl_close($curl); // 关闭CURL会话4
        return $tmpInfo; // 返回数据
    }

使用 curl 实现 get 请求

   /** 
    *   @param string $url 地址
    */
  function get_url($url)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,$url);  //设置访问的url地址
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);//不输出内容
        $result =  curl_exec($ch);
        curl_close ($ch);
        return $result;
    }

将数组按照 id 和 pid 重新组合为树结构

/**
* $list [array] 原始数组
* $pk [string] id
* $pid [string] 父级pid
* $child [array] 承载子集的容器
* return [array] 返回树结构
**/
function list_to_trees($list, $pk='id', $pid = 'pid', $child = 'listArea', $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
            $parantId = $data[$pid];
            if ($root == $parantId) 
            {
                $tree[] = &$list[$key];
            }else 
            {
                if (isset($refer[$parantId])) 
                {
                    $parent = &$refer[$parantId];
                    $parent[$child][] = &$list[$key];
                }
            }
        }
    }
    return $tree;
    }

无限极分类

 /**
     * 无限极分类
     * @param $data [数据]
     * @param int $pid [父级id]
     * @param int $level [层级]
     * @return array
     */
    public function sort($data, $pid = 0, $level = 0)
    {
        static $arr = array();           //创建静态数组
        //dump($arr);
        foreach ($data as $key => $value) { //循环操作所有的分类
            if($value['auth_pid'] == $pid){   //找出第一个顶级分类
                $value['level'] = $level;  //给顶级分类赋一个层级
                $arr[] = $value;           //将顶级分类放入空数组中
                $this->sort($data, $value['auth_id'], $level+1);//将所有分类进行一个排序 auth_id根据字段具体来定
            }
        }
        return $arr;
    }

两个已知经纬度之间的距离

/**
 *求两个已知经纬度之间的距离,单位为米
 *@param lng1,lng2 经度
 *@param lat1,lat2 纬度
 *@return float 距离,单位米
 **/
function getdistance($lng1,$lat1,$lng2,$lat2){
    //将角度转为狐度
    $radLat1=deg2rad($lat1);//deg2rad()函数将角度转换为弧度
    $radLat2=deg2rad($lat2);
    $radLng1=deg2rad($lng1);
    $radLng2=deg2rad($lng2);
    $a=$radLat1-$radLat2;
    $b=$radLng1-$radLng2;
    $s=2*asin(sqrt(pow(sin($a/2),2)+cos($radLat1)*cos($radLat2)*pow(sin($b/2),2)))*6378.137*1000;
    return intval($s);
}