thinkphp5 连接 sqlite数据库得配置方法

在模块下新增 database.php,配置如下:

<?php 
// ThinkPHP Sqlite 数据库配置 
return [     
    'type'           => 'sqlite',
    'database'       => 'db/datasource/dev.sdb', // 相对于入口文件的数据库文件路径
    'prefix'         => 'prefix_',
    'debug'          => true
];

对于使用 Sqlite 作为数据库的,有这4个设置就足以。

然后你就可以使用model 或者是db快捷函数进行查询及各种操作了。

PHP根据经纬度计算俩点之间的距离的俩种方法

直接上代码

/**
 * @param $lat1
 * @param $lng1
 * @param $lat2
 * @param $lng2
 * @return int
 */
function getDistance($lat1, $lng1, $lat2, $lng2){

 //将角度转为狐度

 $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;

 return $s;

}

/**
 * @param $lat1
 * @param $lon1
 * @param $lat2
 * @param $lon2
 * @param float $radius 星球半径
 * @return float
 */
function distance($lat1, $lon1, $lat2,$lon2,$radius = 6378.137)
{
 $rad = floatval(M_PI / 180.0);

 $lat1 = floatval($lat1) * $rad;
 $lon1 = floatval($lon1) * $rad;
 $lat2 = floatval($lat2) * $rad;
 $lon2 = floatval($lon2) * $rad;

 $theta = $lon2 - $lon1;

 $dist = acos(sin($lat1) * sin($lat2) +
 cos($lat1) * cos($lat2) * cos($theta)
 );

 if ($dist < 0 ) {
 $dist += M_PI;
 }

 return $dist = $dist * $radius;
}
$lat1 = '31.253411';
$lon1 = '121.518998';

$lat2 = '31.277117';
$lon2 = '120.744587';

echo getDistance($lat1, $lon1, $lat2, $lon2); // 73.734589823361

echo distance($lat1, $lon1, $lat2, $lon2); // 73.734589823354

[laravel]laravel项目报错DecryptException:The MAC is invalid.

原因:

其实产生这个错误的原因是laravel的key值问题。因为Laravel中的encrypt函数和key值进行了绑定,

说明:
在使用 Laravel 的加密功能前,你需要先为 config/app.php 配置文件中的 key 参数设置一个值,这个值是一个包含 32 个随机字符的字符串。如果这个值没有正确设置,所有由 Laravel 加密的数据都是不安全的。

加密
通过 Crypt facade 可以加密一段数据。所有加密采用的都是 OpenSSL 和 AES-256-CBC cipher。并且,所有加密过的数据都会被赋予一个“信息验证码”(MAC),以防被加密后所得到的字符串被篡改。

由此说明encrypt生成的值和key有关,并且加密数据后会赋予一个mac用在解密时的安全验证,由于项目更换环境后需要重新生成key,所以之前生成的数据在新的环境无法解密,

总结:

更换环境后需要先重新生成key,然后数据库中使用encrypt加密数据需要重新加密。

或者你上线项目之前记录之前的key值即可。