• +86 18940128339
  • 3056844889@qq.com

月度归档 03-31

Flutter Window开发环境

获取 Flutter SDK

  1. 点击下方的安装包,获取 stable 发行通道的 Flutter SDK 最新版本:flutter_windows_3.7.9-stable.zip要查看其他发行通道和以往的版本,请参阅 SDK 版本列表 页面。
  2. 将压缩包解压,然后把其中的 flutter 目录整个放在你想放置 Flutter SDK 的路径中(例如 C:\src\flutter)。

如果你不想安装指定版本的安装包。可以忽略步骤 1 和 2。从 GitHub 上的 Flutter repo 获取源代码,并根据需要,切换到指定的分支或标签。例如:

git clone https://github.com/flutter/flutter.git -b stable

更新 path 环境变量

  • 在开始菜单的搜索功能键入「env」,然后选择 编辑系统环境变量
  • 在 用户变量 一栏中,检查是否有 Path 这个条目:
    • 如果存在这个条目,以 ; 分隔已有的内容,加入 flutter\bin 目录的完整路径。
    • 如果不存在的话,在用户环境变量中创建一个新的 Path 变量,然后将 flutter\bin 所在的完整路径作为新变量的值。

运行 flutter doctor

上述命令会检查你的现有环境,并将检测结果以报告形式呈现出来。仔细阅读它显示的内容,检查是否有尚未安装的软件或是有其他的步骤需要完成(通常会以粗体呈现)。

例如:

[-] Android toolchain - develop for Android devices
    • Android SDK at D:\Android\sdk
    ✗ Android SDK is missing command line tools; download from https://goo.gl/XxQghQ
    • Try re-installing or updating your Android SDK,
      visit https://flutter.cn/docs/setup/#android-setup for detailed instructions.

安装 VS Code

VS Code 是一个可以运行和调试 Flutter 的轻量级编辑器。

安装 Flutter 和 Dart 插件

  1. 打开 VS Code。
  2. 打开 View > Command Palette…
  3. 输入「install」,然后选择 Extensions: Install Extensions
  4. 在扩展搜索输入框中输入「flutter」,然后在列表中选择 Flutter 并单击 Install。此过程中会自动安装必需的 Dart 插件。
  5. 点击 Reload to Activate 以重新启动 VS Code。

通过 Flutter Doctor 命令验证是否安装成功

  1. 打开 View > Command Palette…
  2. 输入 “doctor”,选择 Flutter: Run Flutter Doctor
  3. 打开 OUTPUT 面板查看是否有错误,确保在不同的输出选项 (Output Options) 的下拉列表中选择了 Flutter。

创建Demo 我尝试的是web应用

//创建Demo
flutter create my_app
//切换到 web子文件 使用python运行
python3 -m http.server 8080

ChatGPT PHP

1.聊天模型

$curl = curl_init();
curl_setopt_array($curl, array(
    CURLOPT_URL => "https://api.openai.com/v1/chat/completions",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => json_encode(array(
        "model" => "gpt-3.5-turbo",
        'max_tokens' => 2000,
        "messages" => [array("role" => "user", "content" => $prompt)],
    )),
    CURLOPT_HTTPHEADER => array(
        "Content-Type: application/json",
        "Authorization: Bearer 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",
    ),
));
$response = curl_exec($curl);
curl_close($curl);

2.图片生成

$curl = curl_init();
curl_setopt_array($curl, array(
    CURLOPT_URL => "https://api.openai.com/v1/images/generations",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => json_encode(array(
        "prompt" => $prompt,
        "n" => 1,
        "size" => "1024x1024",
        'response_format' => "b64_json",
    )),
    CURLOPT_HTTPHEADER => array(
        "Content-Type: application/json",
        "Authorization: Bearer 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",
    ),
));
$response = curl_exec($curl);
curl_close($curl);

thinkphp 权限验证

1.安装

composer require 5ini99/think-auth
2.引用
use think\auth\Auth;

3.权限检查代码

    /**
     * 权限检查
     * @return bool
     */
    protected function checkAuth()
    {

        if (!Session::has('admin_id')) {
            $this->redirect('/admin/login');
        }

        $module = $this->request->module();
        $controller = $this->request->controller();
        $action = $this->request->action();
        // 排除权限
        $not_check = ['/Index/index', '/Index/welcome'];
        $admin_id = Session::get('admin_id');
        if (!in_array($module . '/' . $controller . '/' . $action, $not_check)) {
            $auth = new Auth();
            $admin_id = Session::get('admin_id');
            if (!$auth->check($module . '/' . $controller . '/' . $action, $admin_id) && $admin_id != 1) {
                $this->error('没有权限', '');
            }
        }
    }

4.公共配置

// auth配置
'auth'  => [
    'auth_on'           => 1, // 权限开关
    'auth_type'         => 1, // 认证方式,1为实时认证;2为登录认证。
    'auth_group'        => 'auth_group', // 用户组数据不带前缀表名
    'auth_group_access' => 'auth_group_access', // 用户-用户组关系不带前缀表
    'auth_rule'         => 'auth_rule', // 权限规则不带前缀表
    'auth_user'         => 'member', // 用户信息不带前缀表
],

5.数据表

think_ 为自定义的数据表前缀
-- ----------------------------
-- think_auth_rule,规则表,
-- id:主键,name:规则唯一标识, title:规则中文名称 status 状态:为1正常,为0禁用,condition:规则表达式,为空表示存在就验证,不为空表示按照条件验证
-- ----------------------------
DROP TABLE IF EXISTS `think_auth_rule`;
CREATE TABLE `think_auth_rule` (
    `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
    `name` char(80) NOT NULL DEFAULT '',
    `title` char(20) NOT NULL DEFAULT '',
    `type` tinyint(1) NOT NULL DEFAULT '1',
    `status` tinyint(1) NOT NULL DEFAULT '1',
    `condition` char(100) NOT NULL DEFAULT '',  # 规则附件条件,满足附加条件的规则,才认为是有效的规则
    PRIMARY KEY (`id`),
    UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
-- ----------------------------
-- think_auth_group 用户组表,
-- id:主键, title:用户组中文名称, rules:用户组拥有的规则id, 多个规则","隔开,status 状态:为1正常,为0禁用
-- ----------------------------
DROP TABLE IF EXISTS `think_auth_group`;
    CREATE TABLE `think_auth_group` (
    `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
    `title` char(100) NOT NULL DEFAULT '',
    `status` tinyint(1) NOT NULL DEFAULT '1',
    `rules` char(80) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
-- ----------------------------
-- think_auth_group_access 用户组明细表
-- uid:用户id,group_id:用户组id
-- ----------------------------
DROP TABLE IF EXISTS `think_auth_group_access`;
    CREATE TABLE `think_auth_group_access` (
    `uid` mediumint(8) unsigned NOT NULL,
    `group_id` mediumint(8) unsigned NOT NULL,
    UNIQUE KEY `uid_group_id` (`uid`,`group_id`),
    KEY `uid` (`uid`),
    KEY `group_id` (`group_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

6.原理

Auth权限认证是按规则进行认证。 在数据库中我们有

规则表(think_auth_rule)
用户组表(think_auth_group)
用户组明显表(think_auth_group_access)
我们在规则表中定义权限规则, 在用户组表中定义每个用户组有哪些权限规则,在用户组明显表中定义用户所属的用户组。

SVN安装 使用

采用yum安装方式:

1、rpm -qa subversion //检查是否安装了低版本的SVN

2、yum remove subversion //如果存储旧版本,卸载旧版本SVN

3、开始安装yum -y install subversion

安装好后查看版本svnserve –version

4、创建版本仓库:

mkdir -p /data/svn/myproject                                
svnadmin create /data/svn/myproject/

查看/data/svn/myproject 文件夹可以发现有conf, db,format,hooks, locks, README.txt等文件,说明一个SVN库已经建立。

5、配置权限

cd /data/svn/myproject/conf/            //进入配置目录

vim svnserve.conf                    //编辑配置文件,加入下面五行内容

anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
realm = /data/svn/myproject

6、编辑密码文件,添加用户admin密码123456:

vim passwd  

localuser = 123456
defaultuser = 123456

7、编辑权限文件,添加用户test权限

vim authz

[groups]
root = defaultuser 
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
[/]
@root = rw
localuser = rw

8.启动SVN

# svn端口默认是3690 这里使用10102
svnserve -d  --listen-port 10102  -r  /data/svn/   

二、给svn添加钩子同步文件到PHP测试环境 (这里PHP项目目录为/var/www/html/project/)

1、进入版本库下的hooks目录

cd /data/svn/hooks/

2、将post-commit.tmpl 复制为 post-commit

cp post-commit.tmpl post-commit

给post-commit可执行权限

chmod 0777 post-commit

4、编辑post-commit,注释掉#mailer.py……这一行,添加下面四行,编码问题,如果错误的话可能导致无法同步 成功,可选的有en_US.UTF-8、zh_CN.UTF-8、zh_CN.GB2312,可以一个个试。

vi post-commit

#mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf
export LC_ALL=en_US.UTF-8
SVN=/usr/bin/svn
STATIC_DIR=/www/wwwroot/
${SVN} update  ${STATIC_DIR} --username "localuser" --password "123456"

5、在提交之前,进行一次checkout代码到指定目录

svn checkout svn://localhost/ /www/wwwroot/
5、查看 关闭进程 
ps -aux | grep svnserve
 kill -9 端口号

三.设置开机启动

查看服务 ps aux|grep svnserve

查看 pid下面会用到 pidof svnserve

打开 svnserve.pid 添加上面的pid

vi /run/svnserve/svnserve.pid
cat svnserve.pid

编辑 svnserve.service 替换ExecStart内容

vim  /lib/systemd/system/svnserve.service
ExecStart=/usr/bin/svnserve --daemon --pid-file=/run/svnserve/svnserve.pid -d --listen-port 10102 -r /data/svn

svnserve.service 服务

systemctl enable svnserve.service #开机自启
systemctl start svnserve.service #启动服务
systemctl stop svnserve.service #停止服务
systemctl status svnserve.service #停止服务

mysql命令

常用代码

// 设置自增字段
alter table 数据表名 modify 字段名 int auto_increment;
alter table demo modify id int auto_increment;
// 修改自增 起始值
alter table 数据表名 auto_increment = 1001;
alter table demo auto_increment = 1000;

linux终端

//登录mysql(有密码请输入密码)
mysql -u root -p
//打开数据库
show database;
//设置密码
set password = password('123456');
//退出
exit;
//使用 mysql 数据库
use mysql;
// 查询MySQL账户
select user,host from user;
//更改访问限制 
update user set host=’%’where user=’用户名’@'本地账户';
//示例:
update user set host=’%’where user=’root’@'localhost';
//新增远程访问账号 
grant all privileges on 数据库.数据表 to 用户名 @"%" identified by "密码";
//示例:
grant all privileges on *.* to remoteUser @"%" identified by "123456";
//更新配置
flush privileges;
//创建用户
CREATE USER '远程用户'@'%' IDENTIFIED BY '密码';
//示例:
CREATE USER 'remoteUser'@'%' IDENTIFIED BY '123456';
修改密码
ALTER  user '用户名'@'本地账户'IDENTIFIED BY '密码';
//示例:
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
// 用户分配权限
GRANT SELECT, INSERT, UPDATE, REFERENCES, DELETE, CREATE, DROP, ALTER, INDEX, TRIGGER, CREATE VIEW, SHOW VIEW, EXECUTE, ALTER ROUTINE, CREATE ROUTINE, CREATE TEMPORARY TABLES, LOCK TABLES, EVENT ON `数据库名称`.* TO '远程用户'@'%';
//示例:
GRANT SELECT, INSERT, UPDATE, REFERENCES, DELETE, CREATE, DROP, ALTER, INDEX, TRIGGER, CREATE VIEW, SHOW VIEW, EXECUTE, ALTER ROUTINE, CREATE ROUTINE, CREATE TEMPORARY TABLES, LOCK TABLES, EVENT ON `mysql`.* TO 'remoteUser'@'%';
// 分配指定表
GRANT GRANT OPTION ON `数据库名称`.* TO '远程用户'@'%';
GRANT GRANT OPTION ON `mysql`.* TO 'remoteUser'@'%';