/**
* 地图坐标之间的计算
*/
class Coords {
public $EARTH_RADIUS = 6371.393, // 地球平均半径(km)
$PI = 3.1415926; // 拍
/**
* 计算两个坐标之间的距离(米)
*
* @param mixed $fP1Lat
* @param mixed $fP1Lon
* @param mixed $fP2Lat
* @param mixed $fP2Lon
*/
public function distance_between($fP1Lat, $fP1Lon, $fP2Lat, $fP2Lon) {
$fP1Lat = floatval($fP1Lat);
$fP1Lon = floatval($fP1Lon);
$fP2Lat = floatval($fP2Lat);
$fP2Lon = floatval($fP2Lon);
// 角度换算成弧度
$fRadLon1 = deg2rad($fP1Lon);
$fRadLon2 = deg2rad($fP2Lon);
$fRadLat1 = deg2rad($fP1Lat);
$fRadLat2 = deg2rad($fP2Lat);
// 计算经纬度的差值
$fD1 = abs($fRadLat1 - $fRadLat2);
$fD2 = abs($fRadLon1 - $fRadLon2);
// 距离计算
$fP = pow(sin($fD1 / 2), 2) + cos($fRadLat1) * cos($fRadLat2) * pow(sin($fD2 / 2), 2);
return intval($this->EARTH_RADIUS * 2000 * asin(sqrt($fP)) + 0.5);
}
/**
* 计算指定距离的坐标范围
*/
public function coords_range($lat, $lng, $distance = 2) {
$dlng = rad2deg(2 * asin(sin($distance / (2 * 6371)) / cos(deg2rad($lat))));
$dlat = rad2deg($distance / 6371);
$data = array(
'coords_lng_low' => $lng - $dlng,
'coords_lng_high' => $lng + $dlng,
'coords_lat_low' => $lat - $dlat,
'coords_lat_high' => $lat + $dlat
);
return $data;
}
/**
* 计算两个坐标的航向
* @param $start_lat
* @param $start_lon
* @param $end_lat
* @param $end_lon
* @return int
*/
public function get_degree($start_lat,$start_lon,$end_lat,$end_lon){
$rad_lat_a = deg2rad($start_lat); //将角度转换为弧度
$rad_lon_a = deg2rad($start_lon);
$rad_lat_b = deg2rad($end_lat);
$rad_on_b = deg2rad($end_lon);
$d_lon = $rad_on_b - $rad_lon_a;
$y = sin($d_lon) * cos($rad_lat_b);
$x = cos($rad_lat_a) * sin($rad_lat_b) - sin($rad_lat_a) * cos($rad_lat_b) * cos($d_lon);
$brng = rad2deg(atan2($y, $x)); //将弧度数转换为相应的角度数
$brng = ($brng + 360) % 360;
return $brng;
}
}
/**
* PHP发送Json对象数据
*
* @param $url 请求url
* @param $data 发送的json字符串
* @return array
*/
public function json_post($url, $data = NULL)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
if(!$data){
return 'data is null';
}
if(is_array($data))
{
$data = json_encode($data);
}
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_HTTPHEADER,array(
'Content-Type: application/json; charset=utf-8',
'Content-Length:' . strlen($data),
'Cache-Control: no-cache',
'Pragma: no-cache'
));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($curl);
$errorno = curl_errno($curl);
if ($errorno) {
return $errorno;
}
curl_close($curl);
return $res;
}
$data = json_decode(file_get_contents('php://input'), true);
which mysql //获取mysql目录得到 /usr/bin/mysql
/usr/bin/mysql --help | grep -A1 'Default options' //然后获取配置项位置
which php //获取php目录
php -i | grep "Loaded Configuration File" //获取php配置项位置
ps -ef | grep 'http' //获取apache目录
/usr/local/apache2/bin/httpd -V | grep 'SERVER_CONFIG_FILE' //获取apache的配置项位置
ps -ef | grep 'http' //获取apache目录
/usr/local/apache2/bin/httpd -V | grep 'SERVER_CONFIG_FILE' //获取apache的配置项位置
whereis nginx //获取nginx目录
ps -ef | grep 'nginx' //获取nginx的配置项位置
ps -ef | grep 'php-fpm' //获取php-fpm的配置项位置
对称密钥加密机制即对称密码体系,也称为单钥密码体系和传统密码体系。对称密码体系通常分为两大类,一类是分组密码(如DES、AES算法),另一类是序列密码(如RC4算法)。
AES 是一个新的可以用于保护电子数据的加密算法。明确地说,AES 是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 128 位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同, 对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换(permutations )和替换(substitutions)输入数据。Figure 1 显示了 AES 用192位密钥对一个16位字节数据块进行加密和解密的情形。
那DES是什么呢?DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法 在国际上广泛流传开来。需要注意的是,在某些文献中,作为算法的DES称为数据加密算法(Data Encryption Algorithm,DSA),已与作为标准的DES区分开来。
DES设计中使用了分组密码设计的两个原则:混淆(confusion)和扩散(diffusion),其目的是抗击敌手对密码系统的统计分析。混淆是使密文的统计特性与密钥的取值之间的关系尽可能复杂化,以使密钥和明文以及密文之间的依 赖性对密码分析者来说是无法利用的。扩散的作用就是将每一位明文的影响尽可能迅速地作用到较多的输出密文位中,以便在大量的密文中消除明文的统计结构,并且使每一位密钥的影响尽可能迅速地扩展到较多的密文位中,以防对密钥进行逐段破译。具体实现代码如下:
DES 是对称性加密里面常见一种,全称为 Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法。密钥长度是64位(bit),超过位数密钥被忽略。所谓对称性加密即加密和解密密钥相同,对称性加密一般会按照固定长度,把待加密字符串分成块,不足一整块或者刚好最后有特殊填充字符。 跨语言做 DES 加密解密经常会出现问题,往往是填充方式不对、编码不一致或者加密解密模式没有对应上造成。常见的填充模式有: pkcs5、pkcs7、iso10126、ansix923、zero。加密模式有:DES-ECB、DES-CBC、DES-CTR、DES-OFB、DES-CFB。 作为一个软件开发者,可以通过工具测试 DES 加密解密,这里推荐一个在线工具:http://tool.chacuo.net/cryptdes
PHP 提供了 Mcrypt 系列函数来实现 DES 的加解密,但该扩展中的函数陆续被废弃,自 PHP 7.2.0 起,会移到 PECL。 所以本代码用了更通用的 OPENSSL 方式实现 DES 的加解密,具体的实现和使用代码如下:
由于使用 PHPExcel 导出的数据量较大时,写入数据会比较慢,若是对数据格式要求不高的情况,可以用csv文件进行代替,csv文件在写入数据占用的内存较小,写入数据比较快。可以利用php 自带的原生方法进行生成csv文件,具体实现代码如下: