707070/lzh/iB****ks

严格来说,ThinkPHP无需安装过程,这里所说的安装其实就是把ThinkPHP框架放入WEB运行环境(前提是你的WEB运行环境已经OK),可以通过下面几种方式获取和安装ThinkPHP。

5.1版本开始,官网不再提供下载版本,请使用Composer或者git方式安装和更新。

Composer安装

ThinkPHP5支持使用Composer安装

如果还没有安装 Composer,在 LinuxMac OS X 中可以运行如下命令:

1
2
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

在 Windows 中,你需要下载并运行 Composer-Setup.exe
如果遇到任何问题或者想更深入地学习 Composer,请参考 Composer 文档(英文)Composer 中文

由于众所周知的原因,国外的网站连接速度很慢。因此安装的时间可能会比较长,我们建议通过下面的方式使用国内镜像。

打开命令行窗口(windows用户)或控制台(Linux、Mac 用户)并执行如下命令:

1
composer config -g repo.packagist composer https://packagist.phpcomposer.com

注意:最近phpcomposer镜像存在问题,可以改成

1
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/  

如果你是第一次安装的话,在命令行下面,切换到你的WEB根目录下面并执行下面的命令:

1
composer create-project topthink/think=5.1.* tp5

这里的tp5目录名你可以任意更改,执行完毕后,会在当前目录下的tp5子目录安装最新版本的ThinkPHP,这个目录就是我们后面会经常提到的应用根目录。

如果你之前已经安装过,那么切换到你的应用根目录下面,然后执行下面的命令进行更新:

1
composer update topthink/framework

更新操作会删除thinkphp目录重新下载安装新版本,但不会影响application目录,因此不要在核心框架目录添加任何应用代码和类库。

安装和更新命令所在的目录是不同的,更新必须在你的应用根目录下面执行

如果出现错误提示,请根据提示操作或者参考Composer中文文档

一般情况下,composer 安装的是最新的稳定版本,不一定是最新版本,如果你需要安装实时更新的版本(适合学习过程),可以安装5.1.x-dev版本。

1
composer create-project topthink/think=5.1.x-dev tp5

Git安装

也可以使用git版本库安装和更新,ThinkPHP5.1主要分为应用和核心两个仓库,主要包括:

  • 应用项目:https://github.com/top-think/think
  • 核心框架:https://github.com/top-think/framework

之所以设计为应用和核心仓库的分离,是为了支持Composer单独更新核心框架。

安装也需要分两步操作,首先克隆下载应用项目仓库

1
git clone https://github.com/top-think/think tp5

然后切换到tp5目录下面,再克隆核心框架仓库(注意目录名称不要改变):

1
git clone https://github.com/top-think/framework thinkphp

如果你访问github速度比较慢,可以考虑下面两个国内GIT仓库(国内仓库以稳定版本为主,不确保实时更新):

[ 码云 ]

1
2
应用项目:https://gitee.com/liu21st/thinkphp5.git
核心框架:https://gitee.com/liu21st/framework.git

[ Coding ]

1
2
应用项目:https://git.coding.net/liu21st/thinkphp5.git
核心框架:https://git.coding.net/liu21st/framework.git

由于目前仓库默认分支不是5.1版本,你需要切换到5.1分支(首先进入thinkphp目录后执行下面的命令)

1
git checkout 5.1

两个仓库克隆完成后,就完成了ThinkPHP5.1Git方式下载,如果需要更新核心框架的时候,只需要切换到thinkphp核心目录下面,然后执行:

1
git pull 

请不要在应用目录下执行git更新操作。

如果不熟悉git命令行,可以使用任何一个GIT客户端进行操作,在此不再详细说明。

现在只需要做最后一步来验证是否正常运行。

在浏览器中输入地址:

1
http://localhost/tp5/public/

如果浏览器输出如图所示:

img

恭喜你,现在已经完成ThinkPHP5.1的安装!

实际部署中,应该是绑定域名访问到public目录,确保其它目录不在WEB目录下面。

chown -R www.www api.tmp

chmod -R 750 api.tmp

[AWS EC2安装VPN(转载/整理)]

1、先看看你的主机是否已经支持pptp,返回结果为yes就表示通过。
1
modprobe ppp-compress-18 && echo yes
2、是否开启了TUN,有的虚拟机主机需要开启,返回结果为cat: /dev/net/tun: File descriptor in bad state。就表示通过。
1
cat /dev/net/tun
3、安装ppp , pptpd 和 iptables。

先更新一下再安装。

1
yum update
a.安装ppp和pptpd。
1
yum -y install ppp pptpd

如果出现 No package pptpd available ,请先进行以下操作:

1
2
wget http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-14.noarch.rpm
yum install epel-release-7-14.noarch.rpm

如果 wget 也没安装,可以先 yum -y install wget 。

上面的下载地址可能需要自己去网站确认一下

b.安装iptables(可能已经存在,会提示,忽略进行下一步即可)。
1
yum install iptables
4、配置
a.配置客户端IP池(pptpd.conf)
1
vi /etc/pptpd.conf

找到 localip 和 remoteip ,按喜好设置

b.配置options.pptpd,修改dns和proxyarp。
1
vi /etc/ppp/options.pptpd

找到 ms-dns (共两行),按 i 键然后将前面的 # 号删除,并将输入改为你要使用的DNS地址,例如:

1
2
ms-dns	8.8.8.8
ms-dns 8.8.4.4

还要将#proxyarp注释掉

1
#proxyarp
c.配置连接VPN客户端要用到的帐号密码
1
vi /etc/ppp/chap-secrets

格式通俗易懂,client为帐号,server是pptpd服务,secret是密码,表示是分配任意的IP,例如:
username pptpd password *
其中
号处可以设置为分配固定的内网IP地址。

d.配置sysctl.conf(允许转发)。
1
vi /etc/sysctl.conf

添加一行:

1
net.ipv4.ip_forward = 1

保存后执行 sysctl -p 使之生效。

e.配置iptables转发规则,最重要的一步

增加 iptables 转发规则,否则VPN连上后无法通过VPN访问外网。
iptables -t nat -F (清除已有规则)
iptables -t nat -A POSTROUTING -s 前面设置的remoteip(VPN客户端IP)地址/24 -j SNAT –to 你的服务器的公网IP
注意:如果是AWS EC2等部分主机,主机上没有直接绑定公网IP,而是一个内网IP,可用 ifconfig eth0 查看IP地址,上面的公网IP部分应为这个内网IP。
设置错了?可 iptables -t nat -F 后重新设置。

用例:

1
iptables -t nat -A POSTROUTING -s 192.168.90.0/24 -j SNAT --to 172.31.2.113

增加 iptables 防火墙放行规则。(未必需要

1
2
3
4
iptables -I INPUT -p tcp --dport 1723 -j ACCEPT
iptables -I INPUT -p tcp --dport 自定义VPN端口 -j ACCEPT
iptables -I INPUT -p tcp --dport 47 -j ACCEPT
iptables -I INPUT -p gre -j ACCEPT

保存规则

1
iptables-save
f.最后,保险起见,到了这里应该重启一下pptpd服务和iptables服务生效。

pptpd肯定要重启,iptables未必需要

1
2
systemctl restart iptables
systemctl restart pptpd
g.在安全组中增加入站规则,端口1723

至此,你应该可以畅快上网了。

Mysql连接查询

62b74565ef3385cebc6bc30a77a02908

1 分类
1.1 内连接(笛卡尔乘积)

INNER JOIN,INNER可以省略

a 等值连接

1
SELECT u.username, p.name, n.money FROM s_user u, s_project p, s_invest n WHERE p.id = n.projectID AND u.id=n.uid;

以上是SQL92语法,要会但要舍弃。

内连接之等值连接(SQL99)

1
SELECT u.username, p.name, n.money FROM s_user u JOIN s_invest n ON u.id = n.uid JOIN s_project p ON p.id = n.projectID;

b 非等值连接

1
2
3
4
5
6
7
SELECT e.name, e.sal, s.grade
FROM
emp e
JOIN
salgrade s
ON
e.sal BETWEEN s.losal AND s.hisal

c 自连接(1张表看成是2张表)

表结构及演示数据

image-20210427094146331

1
2
3
4
5
6
7
SELECT a.name AS '层级', b.name AS '父层级'
FROM
t_tree a
JOIN
t_tree b
ON
a.upperid = b.id;

查询结果(数据会丢失)

image-20210427094214859

1.2 外连接

LEFT OUTER、RIGHT OUTER,OUTER可以省略

内连接、外连接的区别

内连接:假设A和B进行连接,使用内连接,A、B没有主副之分,凡能匹配的记录都能查询出来。

外连接:A、B中有一张是主表,一张是副表,主要查询主表数据,捎带查询副表。当副表中的数据没有和主表中的数据匹配上,副表自动模拟出null数据与之匹配。

a 左(外)连接:表示左边的表是主表。左连接有右连接的写法。

b 右(外)连接:表示右边的表是主表。右连接有左连接的写法。

示例:自连接的数据

1
2
3
4
5
6
7
SELECT a.name AS '层级', b.name AS '父层级'
FROM
t_tree a
LEFT JOIN
t_tree b
ON
a.upperid = b.id;

查询结果

image-20210427100004345

改写成如下右连接,可得相同结果

1
2
3
4
5
6
7
SELECT a.name AS '层级', b.name AS '父层级'
FROM
t_tree b
RIGHT JOIN
t_tree a
ON
a.upperid = b.id;

开发中,外连接是常用方式。主表的数据无条件的全部查询出来。

嵌套使用例子

image-20210427110035438

案例:将投资表中,投资额单位为万的数值*10000写回投资表

1
2
3
4
5
6
7
8
UPDATE 
s_invest a
JOIN (
SELECT b.id, b.money AS mm
FROM s_invest b
WHERE b.money < 200) AS t
ON a.id = t.id
SET a.money = mm*10000;

var和let的区别

1、作用域不同

var是函数作用域,let是块作用域。

在函数中声明了var,整个函数内都是有效的,比如说在for循环内定义的一个var变量,实际上其在for循环以外也是可以访问的

而let由于是块作用域,所以如果在块作用域内定义的变量,比如说在for循环内,在其外面是不可被访问的,所以for循环推荐用let

img

img

2、let不能在定义之前访问该变量,但是var可以。

let必须先声明,再使用。而var先使用后声明也行,只不过直接使用但没有定义的时候,其值是undefined。var有一个变量提升的过程,当整个函数作用域被创建的时候,实际上var定义的变量都会被创建,并且如果此时没有初始化的话,则默认为初始化一个undefined

img

3、let不能被重新定义,但是var是可以的

img

创建工程后报红提示无法解析符号@SpringBootApplication

解决办法:
删掉本地文件夹中Maven仓库 repository\org\springframework\boot 目录下的spring-boot-autoconfigure 文件夹,然后右键工程maven ->Reimport,亲测有效

简化部署

Hello分析

  • 1、POE文件

    • 1、父项目
1
2
3
4
5
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
</parent>

Spring Boot 版本仲裁中心,导入依赖默认不需要声明版本号

2、导入的依赖
  • 开发导入starter场景启动器
1
2
3
4
5
6
7
8
9
10
11
12
1、见到很多 spring-boot-starter-* : *就某种场景
2、只要引入starter,这个场景的所有常规需要的依赖我们都自动引入
3、SpringBoot所有支持的场景
https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter
4、见到的 *-spring-boot-starter: 第三方为我们提供的简化开发的场景启动器。
5、所有场景启动器最底层的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.3.4.RELEASE</version>
<scope>compile</scope>
</dependency>

application.properties

1
server.context-path=/crud

![image-20230613223045383](/Users/huage/Library/Application Support/typora-user-images/image-20230613223045383.png)

安装EPEL(可以为CentOS等RHEL衍生的发行版提供更多的软件包)

yum install epel-release

备份仓库配置

mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup

mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup

下载新repo到/etc/yum.repos.d/(用阿里云的)

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

生成缓存

yum makecache

安装Nginx

配置Nginx仓库

vim /etc/yum.repos.d/nginx.repo

写入如下内容

1
2
3
4
5
6
#nginx.repo
[nginx]
name=nginx repo
baseurl=http://mirrors.ustc.edu.cn/nginx/centos/7/x86_64/
gpgcheck=0
enable=1

生成缓存

yum makecache

安装nginx

yum -y install nginx

检查nginx版本

nginx -v

启动nginx

1
2
3
systemctl start nginx
systemctl status nginx
systemctl enable nginx

Server IP: 172.17.0.131
IPsec PSK: w8MHFhLo4oL2fE9amSac
Username: vpnuser
Password: YoSutXo9vGRpnNmg

================================================

IPsec VPN server is now ready for use!

Connect to your new VPN with these details:

Server IP: 8.222.150.45
IPsec PSK: JWUfaZVcNz52Lx5kWbTn
Username: vpnuser
Password: kX9mR3fhe59cFNy7

Write these down. You’ll need them to connect!

VPN client setup: https://vpnsetup.net/clients

================================================

================================================

IKEv2 setup successful. Details for IKEv2 mode:

VPN server address: 8.222.150.45
VPN client name: vpnclient

Client configuration is available at:
/root/vpnclient.p12 (for Windows & Linux)
/root/vpnclient.sswan (for Android)
/root/vpnclient.mobileconfig (for iOS & macOS)

Next steps: Configure IKEv2 clients. See:
https://vpnsetup.net/clients

================================================