php常用函数(三)
2021-03-29 07:24
标签:reac bool img exp add ade sprint param header php常用函数(三) 标签:reac bool img exp add ade sprint param header 原文地址:https://www.cnblogs.com/sai564/p/12609133.html通过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; // 写入文件失败
}
}
下一篇:js数据强转