个人所得税2019

首先确定一下新版个税修改的地方:

  1. 个税起征点从3500增加到5000
  2. 新增个税附加扣除,具体就不说了,网上的资料太多了。
  3. 使用累计预扣法预扣税款。

所以计算公式修改为:

1
2
3
累计预扣预缴应纳税所得额 = 累计收入 - 累计免税收入 - 累计减除费用 - 累计专项扣除 - 累计专项附加扣除 - 累计依法确定的其他扣除

本期应预扣预缴税额 =(累计预扣预缴应纳税所得额 × 预扣率 - 速算扣除数) - 累计减免税额 - 累计已预扣预缴税额

看起公式来比较枯燥。我们直接举例子吧,大家直接带入进行计算。

比如说小A,他月工资1W,然后五险一金2000元,附加扣除1500元。那么小A能拿到的的工资是多少呢?

现在我们套用上面的公式计算前三月的工资的工资:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1月份

10000(累计收入) * 1(月份) - 0(累计免税收入) * 1(月份) - 5000(累计减除费用) * 1(月份) - 2000(累计专项扣除) * 1(月份) - 1500(累计专项附加扣除) * 1 - 0(累计依法确定的其他扣除) * 1(月份) = 1500(累计预扣预缴应纳税所得额)

(1500(累计预扣预缴应纳税所得额) * 3%(预扣率) - 0(速算扣除数)) - 0(累计减免税额) - 0(累计已预扣预缴税额) = 45(本期应预扣预缴税额)

2月份

10000(累计收入) * 2(月份) - 0(累计免税收入) * 2(月份) - 5000(累计减除费用) * 2(月份) - 2000(累计专项扣除) * 2(月份) - 1500(累计专项附加扣除) * 2 - 0(累计依法确定的其他扣除) * 2(月份) = 3000(累计预扣预缴应纳税所得额)

(3000(累计预扣预缴应纳税所得额) * 3%(预扣率) - 0(速算扣除数)) - 0(累计减免税额) - 45(累计已预扣预缴税额) = 45(本期应预扣预缴税额)

3月份
10000(累计收入) * 3(月份) - 0(累计免税收入) * 3(月份) - 5000(累计减除费用) * 3(月份) - 2000(累计专项扣除) * 3(月份) - 1500(累计专项附加扣除) * 3 - 0(累计依法确定的其他扣除) * 3(月份) = 4500(累计预扣预缴应纳税所得额)

(4500(累计预扣预缴应纳税所得额) * 3%(预扣率) - 0(速算扣除数)) - 0(累计减免税额) - 90(累计已预扣预缴税额, 前两个月的交税总额) = 45(本期应预扣预缴税额)

预扣率可以参考后面的个税税率表

那么这么算起来,小A每个月的可获得工资为:

月份 本月工资 累计预扣预缴应纳税所得额 本期应预扣预缴税额 税后工资
01月份 10000 1500 45 7955
02月份 10000 3000 45 7955
03月份 10000 4500 45 7955
04月份 10000 6000 45 7955
05月份 10000 7500 45 7955
06月份 10000 9000 45 7955
07月份 10000 10500 45 7955
08月份 10000 12000 45 7955
09月份 10000 13500 45 7955
10月份 10000 15000 45 7955
11月份 10000 16500 45 7955
12月份 10000 18000 45 7955

如果小B月工资是20000,然后五险一金4000元,附加扣除1500元。那么小B能拿到的的工资是多少呢?

月份 本月工资 累计预扣预缴应纳税所得额 本期应预扣预缴税额 税后工资
01月份 10000 9500 285 15715
02月份 10000 19000 285 15715
03月份 10000 28500 285 15715
04月份 10000 38000 425 15575
05月份 10000 47500 950 15050
06月份 10000 57000 950 15050
07月份 10000 66500 950 15050
08月份 10000 76000 950 15050
09月份 10000 85500 950 15050
10月份 10000 95000 950 15050
11月份 10000 104500 950 15050
12月份 10000 114000 950 15050

具体大家可以套用公式对自己的薪资进行计算,或者按照下面参考链接中的工资计算器进行计算。

年终奖计算办法

待续

个税税率表

级数 累计预扣预缴应纳税所得额 预扣率(%) 速算扣除数
1 不超过36000元的 3 0
2 超过36000元至144000元的部分 10 2520
3 超过144000元至300000元的部分 20 16920
4 超过300000元至420000元的部分 25 31920
5 超过420000元至660000元的部分 30 52920
6 超过660000元至960000元的部分 35 85920
7 超过960000元的部分 45 181920

参考

bind9的初步使用(2)

设置局域网访问

比如我的windows 10的ip地址是192.168.1.230。那么我们可以添加如下内容到/etc/bind/named.conf.options文件中。

1
2
3
4
listen-on {
192.168.1.230;
192.168.1.231;
};

填写完成后打开/etc/bind/named.conf.options内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$ cat /etc/bind/named.conf.options 
options {
directory "/var/cache/bind";

// If there is a firewall between you and nameservers you want
// to talk to, you may need to fix the firewall to allow multiple
// ports to talk. See http://www.kb.cert.org/vuls/id/800113

// If your ISP provided one or more IP addresses for stable
// nameservers, you probably want to use them as forwarders.
// Uncomment the following block, and insert the addresses replacing
// the all-0's placeholder.

// forwarders {
// 114.114.114.114;
// };

//========================================================================
// If BIND logs error messages about the root key being expired,
// you will need to update your keys. See https://www.isc.org/bind-keys
//========================================================================
dnssec-validation auto;

listen-on-v6 { any; };

listen-on {
192.168.1.230;
192.168.1.231;
};
};

重启bind9。

然后在windows 10 上设置DNS为192.168.1.231114.114.114.114

这样我们打开cmd,查看域名是否获取到了正确的ip。

1
2
3
4
5
6
7
8
9
10
11
12
PS C:\Users\baogu> ping www.baoguoxiao.pro

正在 Ping www.baoguoxiao.pro [192.168.1.231] 具有 32 字节的数据:
来自 192.168.1.231 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.231 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.231 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.231 的回复: 字节=32 时间=1ms TTL=64

192.168.1.231 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 1ms,平均 = 0ms

但是如果我们这边手机要连怎么办。不能每次都加ip吧。所以这里有个简单的办法。直接将上面的配置修改如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$ cat /etc/bind/named.conf.options 
options {
directory "/var/cache/bind";

// If there is a firewall between you and nameservers you want
// to talk to, you may need to fix the firewall to allow multiple
// ports to talk. See http://www.kb.cert.org/vuls/id/800113

// If your ISP provided one or more IP addresses for stable
// nameservers, you probably want to use them as forwarders.
// Uncomment the following block, and insert the addresses replacing
// the all-0's placeholder.

// forwarders {
// 0.0.0.0;
// };

//========================================================================
// If BIND logs error messages about the root key being expired,
// you will need to update your keys. See https://www.isc.org/bind-keys
//========================================================================
dnssec-validation auto;

listen-on-v6 { any; };

listen-on {
any;
};
};

这样直接将ip列表修改为any。就可以接收所有的ip了。

这个时候我们将bind9再次重启。

首先安装一个nginx。具体的安装教程可查看我的另外一篇文章 apt 安装 nginx

安装之后,如果访问192.168.1.231,就能看到默认的nginx页面了。

手机测试

每个手机是设置是不同的。我这里是iphone,版本是12.1.1。

进入设置->无线局域网->在已连接的WIFI右边点击带圈的感叹号->配置DNS->选择手动。

最后点击添加服务器,输入我们虚拟机的地址:192.168.1.231。

这个时候我们在手机的浏览器里面输入我们之前设置的域名 www.baoguoxiao.pro 。就能看到我们经典的nginx主页了。

这样我们就可以使用手机访问我们的电脑页面了。在调试某些情况的时候,是不是感觉会非常方便呢。

泛域名设置

在开发的时候,可能会出现使用多个域名的情况,但是如果每次添加域名都要设置bind9,还要重启,非常麻烦,那么有没有简单的办法呢?有,就是使用泛域名设置。

废话不多说,请看如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ cat /etc/bind/zones/baoguoxiao.pro.db 
; BIND data file for baoguoxiao.pro
;
$TTL 14400
@ IN SOA ns1.baoguoxiao.pro. host.baoguoxiao.pro. (
201006601 ; Serial
7200 ; Refresh
120 ; Retry
2419200 ; Expire
604800) ; Default TTL
;
baoguoxiao.pro. IN NS ns1.baoguoxiao.pro.

;baoguoxiao.pro. IN A 192.168.1.231

ns1 IN A 192.168.1.231
www IN A 192.168.1.231

这个是我们之前bind9的初步使用(1)对其的设置。那么如果要设置泛域名,只需要把最后一行的www更改为*就可以了。

那么切换后的配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ cat /etc/bind/zones/baoguoxiao.pro.db 
; BIND data file for baoguoxiao.pro
;
$TTL 14400
@ IN SOA ns1.baoguoxiao.pro. host.baoguoxiao.pro. (
201006601 ; Serial
7200 ; Refresh
120 ; Retry
2419200 ; Expire
604800) ; Default TTL
;
baoguoxiao.pro. IN NS ns1.baoguoxiao.pro.

;baoguoxiao.pro. IN A 192.168.1.231

ns1 IN A 192.168.1.231
* IN A 192.168.1.231

最后重启一下,那么泛域名设置就成功了。

不早了,要去睡觉了。

晚安。

apt 安装 nginx

使用apt安装nginx,方便快捷,省去了编译失败的可能。

支持平台

Version Codename Supported Platforms
14.04 trusty x86_64, i386, aarch64/arm64
16.04 xenial x86_64, i386, ppc64el, aarch64/arm64
18.04 bionic x86_64, aarch64/arm64
18.10 cosmic x86_64

我这里的ubuntu的环境是18.10。通过上面的表格可以了解到我这里是支持安装的。

安装

首先,我们安装key

1
curl -s http://nginx.org/keys/nginx_signing.key | sudo apt-key add -

首先先看一下下面的内容:

1
2
deb http://nginx.org/packages/ubuntu/ codename nginx
deb-src http://nginx.org/packages/ubuntu/ codename nginx

这里的codename需要替换,需要替换的值每个版本是不同的,具体可查看上面的表格,因为我的版本是18.10,所以我需要将codename替换为cosmic。替换完成的内容是:

1
2
deb http://nginx.org/packages/ubuntu/ cosmic nginx
deb-src http://nginx.org/packages/ubuntu/ cosmic nginx

现在将其追加到/etc/apt/sources.list文件的末尾:

1
2
3
4
5
6
7
8
$ cat /etc/apt/sources.list
...
deb http://mirrors.aliyun.com/ubuntu cosmic-security multiverse
# deb-src http://mirrors.aliyun.com/ubuntu cosmic-security multiverse

# 这里是重点
deb http://nginx.org/packages/ubuntu/ cosmic nginx
deb-src http://nginx.org/packages/ubuntu/ cosmic nginx

好了。添加完成之后,执行如下命令:

1
sudo apt update

下面就可以进行安装了,只需执行以下命令:

1
sudo apt install nginx

执行完成之后,这样就安装完成了,是不是非常方便呢。

管理命令

启动:

1
sudo systemctl start nginx

停止:

1
sudo systemctl stop nginx

重启:

1
sudo systemctl restart nginx

状态:

1
sudo systemctl status nginx

bind9的初步使用(1)

前言

周五把自己的电脑重装了一下,还是使用的经典的windows+vmware+ubuntu的经典方式(对我来说)。但是我不想每次都修改host文件来实现我的域名访问,所以我在想有没有一个更好的方式,可以让我实现域名映射。这个时候我想到了自己架设一个dns服务器。说干就干,我就准备用dns的开源系统bind9来搞一番。

环境介绍

  • Ubuntu: 18.10 (ip: 192.168.1.230)
  • bind9: 9.11.4
  • Windows 10 (ip: 192.168.1.230)

安装

其实安装非常简单,一条命令就搞定了

1
sudo apt install bind9

管理命令

启动:

1
sudo systemctl start bind9

停止:

1
sudo systemctl stop bind9

重启:

1
sudo systemctl restart bind9

状态:

1
sudo systemctl status bind9

配置域名

举个例子,比如现在我们有个域名是:baoguoxiao.pro。现在我们要对这个域名进行虚拟映射。

首先打开/etc/bind/named.conf.local,追加如下内容到文件尾部:

1
2
3
4
zone "baoguoxiao.pro" {
type master;
file "/etc/bind/zones/baoguoxiao.pro.db";
};

那么现在这个文件的内容完整如下:

1
2
3
4
5
6
7
8
9
10
11
12
//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";

zone "baoguoxiao.pro" {
type master;
file "/etc/bind/zones/baoguoxiao.pro.db"; // 这个文件定义了文件地址
};

我们定义的地址是/etc/bind/zones/baoguoxiao.pro.db。但是我们的/etc/bind/并没有该目录。所以需要如下命令进行创建:

1
2
cd /etc/bind/
sudo mkdir zones

进入该目录:

1
cd zones

然后创建该文件baoguoxiao.pro.db,并追加如下命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
; BIND data file for baoguoxiao.pro
;
$TTL 14400
@ IN SOA ns1.baoguoxiao.pro. host.baoguoxiao.pro. (
201006601 ; Serial
7200 ; Refresh
120 ; Retry
2419200 ; Expire
604800) ; Default TTL
;
baoguoxiao.pro. IN NS ns1.baoguoxiao.pro.

;baoguoxiao.pro. IN A 192.168.1.231

ns1 IN A 192.168.1.231
www IN A 192.168.1.231

这样就设置完成了。然后我们将bind9进行重启。

测试DNS效果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$ dig @192.168.1.231 www.baoguoxiao.pro

; <<>> DiG 9.11.4-3ubuntu5-Ubuntu <<>> @192.168.1.231 www.baoguoxiao.pro
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35630
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: f077ba72f04b75a1ac9b27275c16148f4732abac11c21ce8 (good)
;; QUESTION SECTION:
;www.baoguoxiao.pro. IN A

;; ANSWER SECTION:
www.baoguoxiao.pro. 14400 IN A 192.168.1.231

;; AUTHORITY SECTION:
baoguoxiao.pro. 14400 IN NS ns1.baoguoxiao.pro.

;; ADDITIONAL SECTION:
ns1.baoguoxiao.pro. 14400 IN A 192.168.1.231

;; Query time: 0 msec
;; SERVER: 192.168.1.231#53(192.168.1.231)
;; WHEN: Sun Dec 16 17:02:07 CST 2018
;; MSG SIZE rcvd: 117

好了,这样就表示已经配置成功了

设置默认本机DNS可用

之前的设置我们需要指定本机的DNS服务器才可以使用,如果我们不指定的话,那么查询该域名是没有效果的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ dig baoguoxiao.pro

; <<>> DiG 9.11.4-3ubuntu5-Ubuntu <<>> baoguoxiao.pro
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 52385
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;baoguoxiao.pro. IN A

;; Query time: 274 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Sun Dec 16 17:03:59 CST 2018
;; MSG SIZE rcvd: 43

在ubuntu17.10之后,网卡配置已经更新为netplan。该配置文件的目录是/etc/netplan/。不过里面的文件不一定是相同的名字。我的文件打开是这样的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ cat /etc/netplan/50-cloud-init.yaml 
# This file is generated from information provided by
# the datasource. Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
ethernets:
ens33:
addresses: [192.168.1.231/24]
dhcp4: false
dhcp6: false
gateway4: 192.168.1.1
nameservers:
addresses: [192.168.1.231,114.114.114.114]
version: 2

注意,我在倒数第二行的数组里面添加本机的服务器192.168.1.231。关于该文件的配置,可以查看我的另外一篇文章:ubuntu 17.10 设置固态IP

这样我们在本机就可以不指定dns服务器的基础上进行获取域名的ip了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$ dig www.bgx.me

; <<>> DiG 9.11.4-3ubuntu5-Ubuntu <<>> www.baoguoxiao.pro
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58219
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 15d0881d8eed3292569558cd5c1623fa33a2d05212e7e662 (good)
;; QUESTION SECTION:
;www.baoguoxiao.pro. IN A

;; ANSWER SECTION:
www.baoguoxiao.pro. 14400 IN A 192.168.1.231

;; AUTHORITY SECTION:
baoguoxiao.pro. 14400 IN NS ns1.baoguoxiao.pro.

;; ADDITIONAL SECTION:
ns1.baoguoxiao.pro. 14400 IN A 192.168.1.231

;; Query time: 0 msec
;; SERVER: 192.168.1.231#53(192.168.1.231)
;; WHEN: Sun Dec 16 18:07:54 CST 2018
;; MSG SIZE rcvd: 117

本篇文章就说到这里。下一篇讲如何配置可局域网访问。

wordpress升级的编辑器不能用的问题

之前看到wordpress升级出来5.0了,昨天就把我的博客给升级了,但是发现了一个问题。

我之前的插件都是用的WP Editor.md,结果更新之后发现不能用了。

正好我看到wordpres5.0的更新介绍页面,提示如果不喜欢新编辑器,可以将老的编辑器给安装回来试试看。

我就尝试安装这个经典编辑器了。

嘿嘿,又能用了,真香。

在终端中使用vscode打开文件或者文件夹

在mac进行开发的时候,有时候项目的目录在访达中不好找到。在终端中进行查找的时候就比较方便,一个cd命令可以切到任何位置。

但是将项目目录从加入到编辑器中就比较费劲了。

目前发现了一个特别好玩的东西,就是vscode可以注入code命令,在终端使用code命令打开相应的目录或文件,非常方便。

首先打开vscode软件。

同时按住shift + command + P打开命令面板。

找到Install ‘code' command in PATH,并执行。

那么就可以在终端执行命令了。

比如我要打开nginx.conf。

那么就可以在终端执行:

1
code /usr/local/etc/nginx/nginx.conf

打开目录:

1
code .

code 还有其他命令选项:

参数 描述
-h--help code使用说明
-v--version VS Code版本(例如:0.10.10)
-n--new-window 打开一个VS Code新的版本替代默认版本
-r--reuse-window 强制打开最后活动窗口的文件或文件夹
-g--goto 当和 file:line:column?` 使用时 ,打开文件并定位到一个的特定行和可选的列位置的文件。
file 以一个文件名打开。如果文件不存在,此文件将被创建并标记为已编辑
file:line:column? 以文件的名称在指定行和可选的列的位置打开,你可以以这个方式指定多个文件。但是在使用 file:line:column? 之前必须使用 -g 参数。例如:code -g file:10
folder 以一个文件夹名打开。你可以指定多个文件夹。例如:code folder folder
-d--diff 打开一个不同的编辑器。需要两个文件路径作为参数。例如:code -d file file
--locale 为VS Code设置显示语言,支持语言环境有:en-US (英语) ,zh-TW(中文繁体),zh-CN (中文简体),frdeitjakorues 。例如:code . --locale=en-US 设置显示语言为英语
--disable-extensions 禁用所有安装的插件。下拉选 Show installed Extensions 后插件依然可见,但是永远不会被激活。
--list-extensions code --list-extensions 列出被安装的插件
--install-extension 安装一个插件。提供完整的扩展名 publisher.extension 作为参数。例如:code --install-extension ms-vscode.cpptools
--uninstall-extension 卸载一个插件。提供完整的扩展名 publisher.extension 作为参数.例如 code --uninstall-extension ms-vscode.csharp
-w--wait 等待窗口返回之前关闭

参考

mac搭建web环境

homebrew

在centos上有yum,ubuntu上有apt,而mac则是brew。这个并不是内置的。需要在终端执行命令进行安装。命令如下:

1
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装之后就可以像是linux一样使用包管理了。包的列表可浏览 https://formulae.brew.sh/formula/

nginx

安装命令:

1
brew install nginx

启动nginx

1
brew services start nginx

重启nginx

1
brew services restart nginx

停止nginx

1
brew services stop nginx

PHP

安装

1
brew install php

启动php

1
brew services start php

重启php

1
brew services restart php

停止php

1
brew services stop php

MySQL

安装

1
brew install mysql

启动命令

1
brew services start mysql

重启命令

1
brew services restart mysql

停止命令

1
brew services stop mysql

设置密码

首先启动mysql服务器,然后执行

1
mysql_secure_installation

如果出现如下内容:

1
2
3
4
5
6
VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No:

表示询问你是否需要安装密码验证插件,这里我输入y允许安装了。

接下来

1
2
3
4
5
6
7
There are three levels of password validation policy:

LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:

这里是要求制定密码强度,我这里选择是0,

接下来就是让我输入两边密码了,

因为我输入的密码比较简单,所以有了如下提示:

1
2
Estimated strength of the password: 50
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) :

提示说这个密码的强度不高,询问是否真的使用这类强度的密码呢?我选择使用。

1
Remove anonymous users? (Press y|Y for Yes, any other key for No) :

是否移除匿名用户?肯定要移除啊。

1
Disallow root login remotely? (Press y|Y for Yes, any other key for No) :

是否禁用root远程登录呢?肯定要禁用啊。

1
Remove test database and access to it? (Press y|Y for Yes, any other key for No) :

是否要移除test数据库(这是一个测试数据库)呢?肯定要移除。

1
Reload privilege tables now? (Press y|Y for Yes, any other key for No) :

是否要重载权限表。嗯,要重载。

然后设置就完成了。

接下来我们就可以使用如下命令登录mysql了。

1
mysql -uroot -p

登录验证插件

这里有个小问题,就是mysql的身份验证插件从之前的mysql_native_password更新为caching_sha2_password

目前的PHP并不支持更新后的插件,所以可以参考我如下的文章使用之前的身份验证插件创建用户密码。

具体可以参考我的这一篇文章《数据库升级》.

组合

安装完成后,其实nginx并不能直接和php进行通信。一般通信的方式有两种,一种是通过监听端口(默认9000),一种是监听socket。这里我们使用监听端口的方式。

因为php-fpm这边已经默认是监听127.0.0.1:9000端口了,所以这里只需要修改nginx配置即可。

首先打开/usr/local/etc/nginx/nginx.conf

修改后的配置文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# server 部分修改如下
server {
listen 80; # 修改端口为80
server_name localhost;

charset utf-8; # 设置默认字符集为utf-8

#access_log logs/host.access.log main;

root html;
index index.php index.html index.htm; # 新增index.php

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; // 修改`/script`为`$document_root`,该值为root定义的路径
include fastcgi_params;
}
}

然后打开/usr/local/var/www目录,新增index.php文件,内容如下:

1
2
<?php
phpinfo();

使用如下命令重启nginx

1
brew services restart nginx

最后访问localhost就可以看到phpinfo正确显示的网页了。

参考

查看本机IP

有时候,在登录到云服务器之后,可能需要在终端查询该服务器的ip。

之前我都是用的 ip.cn ,但是感觉不行了。

现在提供一些其他的可选择项:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$ curl ipinfo.io
{
"ip": "60.205.205.243",
"city": "",
"region": "",
"country": "CN",
"loc": "34.7725,113.7270",
"org": "AS37963 Hangzhou Alibaba Advertising Co.,Ltd."
}
$ curl cip.cc
IP : 60.205.205.243
地址 : 中国 北京
运营商 : 阿里云/电信/联通/移动/铁通/教育网

数据二 : 北京市 | 阿里云BGP服务器

数据三 : 中国北京北京市 | 阿里云

URL : http://www.cip.cc/60.205.205.243
$ curl myip.ipip.net
当前 IP:60.205.205.243 来自于:中国 北京 北京 阿里云/电信/联通/移动/铁通/教育网
# curl ifconfig.me
60.205.205.243
$ curl http://members.3322.org/dyndns/getip
60.205.205.243

相信还有这么多的URL。估计哪一个不行了,都能找到可替代的了。

mac 登录阿里云

在windows环境中,我们都是可以通过xshell实现证书登录的。

但是在mac中却没有相关的设置,那么如何使用mac进行证书登录呢。

首先,我们需要有一个私钥文件。

比如我的是aliyun.pem.

我将其存放在/home/baoguoxiao/aliyun.pem

登录的命令则是如下这条:

1
ssh -i /home/baoguoxiao/aliyun.pem root@ip

执行该命令的时候可能会提示如下错误:

1
Permissions 0755 for '/home/baoguoxiao/aliyun.pem' are too open.

这个表示我们给与这个文件的权限太大了,所以需要对其设置只读权限。

执行如下命令:

1
chmod 400 /home/baoguoxiao/aliyun.pem

然后再次使用如上的ssh命令,就可以顺利的登录阿里云服务器了。

这样真的好棒。妈妈再也不用担心我的学习。

参考

javascript将html实体转回

有时候我们可能需要向html中传递html代码。但是因为我们的后台框架使用了laravel。所以我们在赋值的时候就会变成:

1
{{$username}}

虽然我们使用自带的非转义的赋值方法:

1
{!! $username !!}

但是我的需求却是不能使用后面的这类方法。

通过谷歌,我了解到一种完美的办法,可以将转义后的代码再次转回来。

代码如下:

1
2
3
4
5
function htmlDecode(input){
var e = document.createElement('div');
e.innerHTML = input;
return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue;
}

我们只需要调用该方法就可以完美执行反转义了:

1
2
htmlDecode("&lt;img src='myimage.jpg'&gt;"); 
// returns "<img src='myimage.jpg'>"

参考