分类 技术专栏 下的文章

在项目开发过程中,涉及app端,经常会根据版本号做一些开发限制工作,所以记录一下
介绍:version_compare — 对比两个「PHP 规范化」的版本数字字符串
说明:

version_compare(string $version1, string $version2, ?string $operator = null): int|bool

,此函数首先在版本字符串里用一个点 . 替换 _、- 和 +,也会在任意非数字前后插入一个点 .,这样,类似 '4.3.2RC1' 将会变成 '4.3.2.RC.1'。 接下来它会分割结果, 然后它会从左往右对比各个部分。 如果某部分包含了特定的版本字符串,将会用以下顺序处理: 列表中未找到的任意字符串 < dev < alpha = a < beta = b < RC = rc < # < pl = p。 这种方式不仅能够对比类似 '4.1' 和 '4.1.2' 那种不同的版本级别,同时也可以指定对比任何包含 PHP 开发状态的版本
参数:version1第一个版本数。version2第二个版本数。operator可选运算符。可能运算符有:<、lt、<=、le、 >、gt、>=、ge、==、 =、eq、!=、<>、ne。此参数区分大小写,它的值应该是小写的。
返回值:默认情况下,在第一个版本低于第二个时,version_compare() 返回 -1;如果两者相等,返回 0;第二个版本更低时则返回 1。当使用了可选参数 operator 时,如果关系是操作符所指定的那个,函数将返回 true,否则返回 false。
示例:

if (version_compare(PHP_VERSION, '7.0.0') >= 0) {
    echo 'I am at least PHP version 7.0.0, my version: ' . PHP_VERSION . "\n";
}

if (version_compare(PHP_VERSION, '5.3.0') >= 0) {
    echo 'I am at least PHP version 5.3.0, my version: ' . PHP_VERSION . "\n";
}

if (version_compare(PHP_VERSION, '5.0.0', '>=')) {
    echo 'I am at least PHP version 5.0.0, my version: ' . PHP_VERSION . "\n";
}

if (version_compare(PHP_VERSION, '5.0.0', '<')) {
    echo 'I am still PHP 4, my version: ' . PHP_VERSION . "\n";
}
$version = '1.7.2';
if (version_compare($cv, '1.7.1', '>=')) {
    echo '当前版本正确';
}else{
    echo '当前版本太低,请升级版本后体验';
}

注意:指定类似 alpha、beta 的版本字符串是大小写敏感的。 版本字符串的来源若不遵循 PHP 标准,可能需要在调用 version_compare() 之前先用 strtolower() 转成小写。

原文参考:https://www.php.net/manual/zh/function.version-compare.php

一、去官网下载适合当前系统版本的app,官网地址:https://github.com/yanue/V2rayU/releasese
二、安装app,期间需要在安全性与隐私里面允许软件包安装
三、软件配置:
1、选择全局模式,如图所示WX20230404-181142@2x.png
2、打开服务器设置,选择手动,添加自己国外vps服务器的相关配置信息,host为自己服务器域名(不含https://或http://),id为服务器xray生成,协议选择vless,如图所示:WX20230404-181510@2x.png
3、打开路由设置,选择绕过大陆地址,如图:WX20230404-182730@2x.png
4、配置完后服务器列表里面选择刚才配置的服务器
四、浏览器访问www.google.com测试是否能够成功打开
(注:以上信息只是个人方便使用google检索,不可用于商业用途)

一、作用:
通过使用脚本,可以在 Elasticsearch 计算自定义表达式。
二、支持哪些script脚本语言
默认的脚本语言采用的是painless
d7f0904e82db4d74878c9c4a77e9b2d7.png
三、script脚本使用示例
1、计算两个字段的排序

      $searchParams['body']['sort'] = [
                "_script" => [
                    "script" => [
                        "inline" => "doc['zwk_zkrs'].value > 0 ? doc['zwk_hege'].value/doc['zwk_zkrs'].value : 0"
                    ],
                    "type" => "number",
                    "order" => "desc",
                ]
            ];
   

2、计算两个字段的求和

      $searchParams['body']['script_fields'] = [
                "_script" => [
                    "script" => [
                        "source" => "doc['zwk_hege'].value + doc['zwk_hege'].value"
                    ],
                    "params" => [
                         "multiplier" => 2
                    ],
                ]
            ];
   

3、文档内容更新(指定如果文档不存在就应该先创建)

      $searchParams = [
                "_script" => [
                    "script" => [
                        "source" => "ctx._source.click_num+=1",
                        "upsert" => [
                            "views" => 1
                        ]
                    ]
                ]
            ];
   

四、使用说明
常用运算符和函数:
Integer, floating point, hex and octal literals
算数运算符: + - * / %
位运算符: | & ^ ~ << >> >>>
布尔运算符 (包含三元运算符): && || ! ?:
比较运算符: < <= == >= >
常用数学函数: abs ceil exp floor ln log10 logn max min sqrt pow
三角函数库函数: acosh acos asinh asin atanh atan atan2 cosh cos sinh sin tanh tan

示例:
a、如果字段缺失,会按照默认值0来计算,也可以使用: doc['myfield'].empty ? 100 : doc['myfield'].value
b、当字段是多值的时候,默认返回最小的值,可以选择别的值: doc['myfield'].sum().
c、布尔值字段暴率为数字,true 映射为1,false 映射为0.例如:doc['on_sale'].value ? doc['price'].value * 0.5 : doc['price'].value。

文档参考:https://www.jianshu.com/p/e2eaeb65af21

先上代码:

use GuzzleHttp\Psr7;

$response = $client->request('POST', 'http://httpbin.org/post', [
    'multipart' => [
        [
            'name'     => 'field_name',
            'contents' => 'abc'
        ],
        [
            'name'     => 'file_name',
            'contents' => Psr7\Utils::tryFopen('/path/to/file', 'r')
        ],
        [
            'name'     => 'other_file',
            'contents' => 'hello',
            'filename' => 'filename.txt',
            'headers'  => [
                'Content-Type' => 'multipart/form-data'
            ]
        ]
    ]
]);

说明:
name 当前form表单提交的字段
contents 对应当前from表单字段内容
该方法支持支持同时提交字符内容和文件
更多GuzzleHttp 请参考官方文档:https://docs.guzzlephp.org/en/stable/quickstart.html#post-form-requests

location / {
    add_header Access-Control-Allow-Origin *; 
    add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS'; 
    add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';

}