Php-根据经纬度计算直线距离

static public $DEF_PI = 3.14159265359; // PI static public $DEF_2PI= 6.28318530712; // 2*PI static public $DEF_PI180= 0.01745329252; // PI/180.0 static public $DEF_R =6370693.5; // radius of earth /** * 适用于近距离测直线距离 */ public static function GetShortDistance($lon1, $lat1, $lon2, $lat2) { // 角度转换为弧度 $ew1 = $lon1 * self::$DEF_PI180; $ns1 = $lat1 * self::$DEF_PI180; $ew2 = $lon2 * self::$DEF_PI180; $ns2 = $lat2 * self::$DEF_PI180; // 经度差 $dew = $ew1 - $ew2; // 若跨东经和西经180 度,进行调整 if ($dew > self::$DEF_PI) $dew = self::$DEF_2PI - $dew; else if ($dew < -self::$DEF_PI) $dew = self::$DEF_2PI + $dew; $dx = self::$DEF_R * cos($ns1) * $dew; // 东西方向长度(在纬度圈上的投影长度) $dy = self::$DEF_R * ($ns1 - $ns2); // 南北方向长度(在经度圈上的投影长度) // 勾股定理求斜边长 $distance = sqrt($dx * $dx + $dy * $dy); return $distance; }

八月 12, 2022 · 1 分钟 · Ken

Php-编码解码punycode

前言 域名的编码解码 什么是PunyCode 英文域名在IIS或Apache中的虚拟主机设置,可以直接使用英文域名,如webmasterhome.cn。 中文域名在IIS或Apache中应如何设置主机头呢 在进行设置之前要先把中文域名转化成为PunyCode编码,然后在主机头设置里面填上中文域名所对应的PunyCode编码(xn–fiqsC146Ah4ex80Cro7A.com)便可。 新的国际化域名的标准在网域名称编码上,为了保留向下兼容性及不影响现有的应用程序协议,因此将多国语言域名转成ASCII编码 目标 前置条件 正式内容 <?php class Punycode { const TMIN=1; const TMAX=26; const BASE = 36; const INITIAL_N = 128; const INITIAL_BIAS = 72; const DAMP = 700; const SKEW = 38; const DELIMITER = '-'; const MAXINT = 2147483647; //encode编码时候的错误返回值 const ERROR_BAD_INPUT = -1; const ERROR_BIG_OUTPUT = -2; const ERROR_OVERFLOW = -3; /** * 配置 * 1: 使用iconv * 2: iconv Unicode-1-1 * 3: 使用mb_convert_encoding(较通用,需mb_string支持) */ const CHARSET_MODE = 3; /** * punycode编码 * @param string $input * 输入的字符传不能有空格....

八月 12, 2022 · 4 分钟 · Ken

Php-生成ssl证书所需的csr信息

/** * 生成CSR和KEY */ public function CreateCsr() { $all = request()->all(); $dn = [ "countryName" => trim(strtoupper($all['countryName'])), //所在国家 "stateOrProvinceName" => trim($all['stateOrProvinceName']), //所在省份 "localityName" => trim($all['localityName']), //所在城市 "organizationName" => trim($all['organizationName']), //注册人姓名 "organizationalUnitName" => trim($all['organizationalUnitName']), //组织名称 "commonName" => trim($all['commonName']), //公共名称 ]; if (isset($all['emailAddress']) && $all['emailAddress']) { $dn['emailAddress'] = $all['emailAddress']; } $config = [ "private_key_bits" => isset($all['keysize']) && $all['keysize'] ? $all['keysize'] : 2048, //字节数 512 1024 2048 4096 等 "private_key_type" => OPENSSL_KEYTYPE_RSA, //加密类型 'digest_alg' => 'sha256', ]; $privkey = openssl_pkey_new($config); if ($privkey === false) { $config['config'] = "D:/phpstudy_pro/Extensions/Apache2....

八月 12, 2022 · 1 分钟 · Ken

Php-Swagger代码了解

前言 良好的文档规范,对于前后端的沟通是很有必要的,减少没必要的误解和争执,前端也可以根据文档的格式先制定出页面的流程和提前mock数据开发 目标 前置条件 zircote/swagger-php document 正式内容 1. 基础了解定义文档的语法 文档描述 @OA\Info(title=“Fapi”, version=“0.1”,description=“antdv5的接口前缀为/api/v2 当前版本为/api/返回列表的格式有区别外其他一致”), 文档中的api路径 @OA\Server(url=“http://www.github.com/",description="github",), 预先定义好返回数据的格式 @OA\Schema( schema=“Pagination”, @OA\Property(property=“current”, type=“integer”), @OA\Property(property=“total”, type=“integer”), @OA\Property(property=“pageSize”, type=“integer”), ) 分组每种接口的类别,如/user, /order /record 等, @OA\Tag(name=“api-tag”, description=“Tag”) 编写接口的声明 @OA\Post( path="/api/index", summary="api name", operationId="UniqueOperationId", tags={"api-tag"}, @OA\Parameter(in="query", name="fIDDomainFolder", required=false,schema={"type":"string"},description=""), @OA\Parameter(in="query", name="intActive", required=false,schema={"type":"integer"},description=""), @OA\Parameter(in="query", name="timetype", required=false,schema={"type":"string","enum":{"created_at","expired_at","update_at"}},description="时间类型"), @OA\Response( response="200", description="An example resource", @OA\JsonContent( @OA\Property(property="Pagination",type="object", ref="#/components/schemas/Pagination"), ) ), ) 2. 将定义好的注释声明生成openapi.json $openapi = \OpenApi\Generator::scan([ path . 'api', path . 'model', ]); $openapi->toJson() 3....

八月 12, 2022 · 1 分钟 · Ken

Php支付接口

前言 项目上需要接触到不同种类的支付平台,有一些其他第三方平台的支付也是为了企业没资质或为了得到更好的费率原因,因此也总结一下个人在开发中的使用记录 目标 通过合并支付的接口,让用户在选择支付上能更简单快捷 前置条件 相关支付平台都有自己的支付申请条件,因此根据需求自行了解注册 环境 PHP 正式内容 支付的需求最主要在于3个接口的实现 interface PaymentClientInterface { /** * 支付请求 * @param $order_out_no * @param $total_fee * @param array $param * @return mixed */ public function pay($out_trade_no,$total_fee,$param=[]); /** * 查询支付结果 * @return mixed */ public function query($out_trade_no,$param=[]); /** * 支付回调,由于各支付平台的参数都不同,因此返回原始信息自己处理 * @param $all * @return mixed */ public function handle($all); } wechat 微信支付 public function query($out_trade_no, $param = []) { $action = "/v3/pay/transactions/out-trade-no/{$out_trade_no}"; $resp = $this->request($action, [], 'GET'); return $resp; } private function sign($url, $params, $method) { $params['mchid'] = $this->apiConfig->ExtraConfig['mch_id']; $serial_no = $this->apiConfig->ExtraConfig['serial_no']; $mch_private_key = file_get_contents("/conf/wechat_private_key....

八月 12, 2022 · 8 分钟 · Ken