php常用函数(三)

2021-03-29 07:24

阅读:1019

标签:reac   bool   img   exp   add   ade   sprint   param   header   

通过curl发起请求

/**
 * 通过curl发起请求
 * @param string $url     发送的url
 * @param array $data     发送的数据
 * @return mixed
 */
function curlRequest($url, $data = null)
{
    $curl = curl_init();//初始化curl
    curl_setopt($curl, CURLOPT_URL, $url);//需要获取的URL地址
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//禁止cURL验证对等证书
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);//不检查SSL证书名称
    if (!empty($data)) {
        curl_setopt($curl, CURLOPT_POST, 1);//发送POST请求
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);//发送POST数据
    }
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//获取的信息以字符串返回
    curl_setopt($curl, CURLOPT_TIMEOUT, 180);//设置请求超时时间为3分钟
    $output = curl_exec($curl);
    curl_close($curl);
    return $output;
}

获取客户端IP地址

/**
 * 获取客户端IP地址
 * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字
 * @param boolean $adv 是否进行高级模式获取(有可能被伪装)
 * @return mixed
 */
function getClientIp($type = 0, $adv = false)
{
    $type = $type ? 1 : 0;
    static $ip = NULL;
    if ($ip !== NULL)
        return $ip[$type];
    if ($adv || isset($_SERVER[‘HTTP_X_REAL_FORWARDED_FOR‘])) {
        if (isset($_SERVER[‘HTTP_X_REAL_FORWARDED_FOR‘])) {
            $ip = $_SERVER[‘HTTP_X_REAL_FORWARDED_FOR‘];
        } elseif (isset($_SERVER[‘HTTP_CLIENT_IP‘])) {
            $ip = $_SERVER[‘HTTP_CLIENT_IP‘];
        } elseif (isset($_SERVER[‘REMOTE_ADDR‘])) {
            $ip = $_SERVER[‘REMOTE_ADDR‘];
        }
    } elseif (isset($_SERVER[‘REMOTE_ADDR‘])) {
        $ip = $_SERVER[‘REMOTE_ADDR‘];
    }
    // IP地址合法验证
    $long = sprintf("%u", ip2long($ip));
    $ip = $long ? array($ip, $long) : array(‘0.0.0.0‘, 0);
    return $ip[$type];
}

计算两经纬度之间的距离

/**
 * 计算两经纬度之间的距离
 * @param $lat1
 * @param $lng1
 * @param $lat2
 * @param $lng2
 * @return float|int
 */
function getDistance($lat1, $lng1, $lat2, $lng2)
{
    $EARTH_RADIUS = 6378.137;
    $rad_arr = array_map(
        function ($item) {
            return $item * 3.1415926535898 / 180.0;
        }, [$lat1, $lng1, $lat2, $lng2]
    );
    $a = $rad_arr[0]-$rad_arr[2];
    $b = $rad_arr[1]-$rad_arr[3];
    $s = 2*asin(sqrt(pow(sin($a/2), 2)+cos($rad_arr[0])*cos($rad_arr[2])*pow(sin($b/2), 2)));
    $s = $s*$EARTH_RADIUS*1000;
    $s = round($s * 10000) / 10000;
    return $s;
}

将数据表导出成csv格式文件并下载

/**
 * 将数据表导出成csv格式文件并下载
 * @param array $data:要导出的数据
 * @param array $del:不导出的字段名,指定的字段数据不被导出
 * @param string $head:表头字段名,以逗号隔开,将在导出的 CSV 文件第一行显示
 * @param string $save:下载时保存的文件名前缀,不含后缀,系统会在前缀后加上下载日期和文件扩展名,如定义:questions,保存时的文件名为:questions_20140108.csv
 * @param string $coding:保存的字符编码,目标字符编码
 * @return bool
 */
function data2csv($data = array(), $del = array(), $head = ‘‘, $save = ‘‘, $coding = ‘gbk‘)
{
	$tmpfile = ROOT_PATH.‘/tempimg/data2excel_‘.time().mt_rand().‘.csv‘;//生成导出的CSV文件,临时保存路径,随机字串,防止被下载
	@setlocale(LC_ALL, ‘zh_CN‘);
	if ($fp = @fopen($tmpfile, ‘w‘)) {
		@fputcsv($fp, explode(‘,‘, iconv(‘utf-8‘, $coding, $head)));
		foreach ($data as $n) {
			foreach ((array)$del as $d) {//删除不导出的字段
				unset($n[$d]);
			}
			foreach ($n as &$p) {//编码转换
				$p = iconv(‘utf-8‘, $coding, $p);
			}
			@fputcsv($fp, $n);
		}
		@fclose($fp);
		ob_end_clean();
		header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
		header(‘Content-Description: File Transfer‘);
		header(‘Content-Type: application/octet-stream‘);
		@header(‘Content-Length: ‘.filesize($tmpfile));
		header(‘Content-Disposition: attachment; filename=‘.$save.‘_‘.date(‘Y_m_d_H_i_s‘).‘.csv‘);
		@readfile($tmpfile);	
		@unlink($tmpfile);
		die(); // 必须结束
	}else{
		return false; // 写入文件失败
	}
}

  

php常用函数(三)

标签:reac   bool   img   exp   add   ade   sprint   param   header   

原文地址:https://www.cnblogs.com/sai564/p/12609133.html

上一篇:istio-http流量管理(1)

下一篇:js数据强转


评论


亲,登录后才可以留言!