🎨 截断

This commit is contained in:
zyimm 2023-10-24 10:54:34 +08:00
parent 77eec054b3
commit fdbe7c0e31
25 changed files with 78 additions and 67 deletions

View File

@ -50,7 +50,7 @@ client.loop_forever()
``` ```
上面的代码展示了如何连接到MQTT服务器并订阅主题。您还可以使用client.publish()方法发布消息到指定主题! 上面的代码展示了如何连接到MQTT服务器并订阅主题。您还可以使用client.publish()方法发布消息到指定主题!
<!--more-->
## 音响领域问题 ## 音响领域问题

View File

@ -19,7 +19,7 @@ sudo apt-get autoremove docker docker-ce docker-engine docker.io containerd runc
dpkg -l | grep docker dpkg -l | grep docker
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P
``` ```
<!--more-->
## 卸载没有删除的docker相关插件,比如 ## 卸载没有删除的docker相关插件,比如
``` ```
sudo apt-get autoremove docker-ce-* sudo apt-get autoremove docker-ce-*

View File

@ -21,7 +21,7 @@ docker run -d --net=my-docker-net --ip=172.0.0.3 --name=[容器名字] -v [镜
通过IP`172.0.0.3`访问该容器了。 通过IP`172.0.0.3`访问该容器了。
<!--more-->
# 补充知识 # 补充知识
172.0.0.0/24 是一个 CIDRClassless Inter-Domain Routing表示法它使用网络地址和掩码长度来表示一个 IP 地址范围。255.255.255.0 是对应的子网掩码,也称为网络掩码。包含了从 172.0.0.0 到 172.0.0.255 的所有 IP 地址。 172.0.0.0/24 是一个 CIDRClassless Inter-Domain Routing表示法它使用网络地址和掩码长度来表示一个 IP 地址范围。255.255.255.0 是对应的子网掩码,也称为网络掩码。包含了从 172.0.0.0 到 172.0.0.255 的所有 IP 地址。

View File

@ -24,7 +24,7 @@ OPTIONS说明
## docker 定时任务执行 ## docker 定时任务执行
> 下面是PHP的satis私有镜像仓库命令在docker中同步命令如下 > 下面是PHP的satis私有镜像仓库命令在docker中同步命令如下
<!--more-->
```shell ```shell
docker exec php74 /bin/sh -c "cd satis/ && php bin/satis build satis.json public/" docker exec php74 /bin/sh -c "cd satis/ && php bin/satis build satis.json public/"
``` ```

View File

@ -8,19 +8,19 @@ tags: Docker
使用阿里云镜像服务进行 docker login 发生错误,具体如下: 使用阿里云镜像服务进行 docker login 发生错误,具体如下:
```shell
```
docker login失败err: exit status 1, Try “pass init“ docker login失败err: exit status 1, Try “pass init“
``` ```
后来搜索一下,找到问题解决办法! 后来搜索一下,找到问题解决办法!
<!--more-->
## 解决办法 ## 解决办法
### 1.安装 docker-credential-pass ### 1.安装 docker-credential-pass
```
```shell
wget https://github.com/docker/docker-credential-helpers/releases/download/v0.6.0/docker-credential-pass-v0.6.0-amd64.tar.gz wget https://github.com/docker/docker-credential-helpers/releases/download/v0.6.0/docker-credential-pass-v0.6.0-amd64.tar.gz
tar -xf docker-credential-pass-v0.6.0-amd64.tar.gz tar -xf docker-credential-pass-v0.6.0-amd64.tar.gz
@ -32,7 +32,8 @@ docker-credential-pass //出现 You should see: "Usage: docker-credential-pass <
``` ```
### 2.安装 gpg pass & 生成key ### 2.安装 gpg pass & 生成key
```
```shell
apt install gpg pass apt install gpg pass
# 下一步 生成key # 下一步 生成key
@ -42,13 +43,15 @@ gpg --generate-key #需要要填入姓名邮箱等信息. 输入新的password
pass init (paste from clipboard) //直接从复制版上粘贴 pass init (paste from clipboard) //直接从复制版上粘贴
``` ```
### 3.设置密码 ### 3.设置密码
```
```shell
pass insert docker-credential-helpers/docker-pass-initialized-check # 输入新密码 pass insert docker-credential-helpers/docker-pass-initialized-check # 输入新密码
``` ```
### 4. 修改~/.docker/config.json 没有就创建 ### 4. 修改~/.docker/config.json 没有就创建
```json ```json
{ {
"credsStore":"pass" "credsStore":"pass"
@ -57,7 +60,6 @@ pass insert docker-credential-helpers/docker-pass-initialized-check # 输入新
再次 docker login应该不会出现授权错误 再次 docker login应该不会出现授权错误
## 参考链接 ## 参考链接
[https://github.com/docker/docker-credential-helpers/issues/102](https://github.com/docker/docker-credential-helpers/issues/102) [https://github.com/docker/docker-credential-helpers/issues/102](https://github.com/docker/docker-credential-helpers/issues/102)

View File

@ -10,6 +10,8 @@ Docker 镜像的定制实际上就是定制每一层所添加的配置、文件
Dockerfile 是一个文本文件,其内包含了一条条的 **指令(Instruction)**,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。 Dockerfile 是一个文本文件,其内包含了一条条的 **指令(Instruction)**,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
<!--more-->
### 使用 Dockerfile 构建镜像 ### 使用 Dockerfile 构建镜像
## 二、Dockerfile 指令详解 ## 二、Dockerfile 指令详解

View File

@ -8,13 +8,10 @@ tags: Docker
因为部分老项目使用5.6版本且部分功能依赖zip扩展 ,所以在镜像(apline)构建安装zip扩展安装过程中报如下错误 因为部分老项目使用5.6版本且部分功能依赖zip扩展 ,所以在镜像(apline)构建安装zip扩展安装过程中报如下错误
``` ```shell
Please reinstall the libzip distribution Please reinstall the libzip distribution
``` ```
## 解决办法 ## 解决办法
```sh ```sh
@ -28,4 +25,5 @@ docker-php-ext-enable zip
``` ```
## 补充 ## 补充
可能还有其他问题,不过我本机可能只缺少这些依赖,所以安装成功了 可能还有其他问题,不过我本机可能只缺少这些依赖,所以安装成功了

View File

@ -13,7 +13,7 @@ docker pull ghcr.io/jaywcjlove/linux-command:latest
# 自定义端口 # 自定义端口
docker run --name linux-command --rm -d -p 3100:3000 wcjiang/linux-command:latest docker run --name linux-command --rm -d -p 3100:3000 wcjiang/linux-command:latest
``` ```
<!--more-->
在浏览器中访问如下地址: 在浏览器中访问如下地址:
`http://localhost:3100/` `http://localhost:3100/`

View File

@ -5,7 +5,7 @@ tags: Samba
--- ---
家里一台软路由安装了jellyfin想把媒体目录挂载到另一台大容量的主机上。所以要将这台大容量的主机上通过Samba共享给软路由主机上因此需将软路由主机本地文件夹映射到远程大容量的主机Samba共享目录下。 家里一台软路由安装了jellyfin想把媒体目录挂载到另一台大容量的主机上。所以要将这台大容量的主机上通过Samba共享给软路由主机上因此需将软路由主机本地文件夹映射到远程大容量的主机Samba共享目录下。
<!--more-->> <!--more-->
前提Samba安装配置已经在两台主机上配好这里不再复述 前提Samba安装配置已经在两台主机上配好这里不再复述
# 安装软件包 # 安装软件包

View File

@ -6,7 +6,6 @@ tags: ssh
由于更换新电脑,需要生成新的密钥去免密登陆服务器,小记一下流程,免得下次还得搜索一下相关教程。 由于更换新电脑,需要生成新的密钥去免密登陆服务器,小记一下流程,免得下次还得搜索一下相关教程。
## 密钥登录的过程 ## 密钥登录的过程
SSH 密钥登录分为以下的步骤。 SSH 密钥登录分为以下的步骤。
@ -18,8 +17,10 @@ SSH 密钥登录分为以下的步骤。
5. 客户端收到服务器发来的数据,使用私钥对数据进行签名,然后再发还给服务器。 5. 客户端收到服务器发来的数据,使用私钥对数据进行签名,然后再发还给服务器。
6. 服务器收到客户端发来的加密签名后,使用对应的公钥解密。若解密后数据一致,则允许用户登录。 6. 服务器收到客户端发来的加密签名后,使用对应的公钥解密。若解密后数据一致,则允许用户登录。
<!--more-->
## 生成公/私密钥 ## 生成公/私密钥
```sh
```shell
# 我这边是linux windows 系统可以在当前用户文件目录下自行创建该文件夹 # 我这边是linux windows 系统可以在当前用户文件目录下自行创建该文件夹
cd ~/.ssh cd ~/.ssh
# 生成密钥 可使用-t参数指定密钥的加密算法。默认RSA 其他算法可以搜索了解一下 然后一路回车即可 # 生成密钥 可使用-t参数指定密钥的加密算法。默认RSA 其他算法可以搜索了解一下 然后一路回车即可
@ -36,7 +37,6 @@ ssh-keygen
手动上传就是直接将公钥里面文本直接追加到`~/.ssh/authorized_keys`里面。 手动上传就是直接将公钥里面文本直接追加到`~/.ssh/authorized_keys`里面。
另外还可以使用`ssh-copy-id` 命令进行自动上传,本质就是自动把公钥里面文本直接追加到`~/.ssh/authorized_keys`里面。密令如下: 另外还可以使用`ssh-copy-id` 命令进行自动上传,本质就是自动把公钥里面文本直接追加到`~/.ssh/authorized_keys`里面。密令如下:
```sh ```sh
@ -49,7 +49,6 @@ ssh-copy-id -i pub_key_file user@host
配置config目的在于简化ssh登录命令在当前用户 `~/.ssh/` 新建config文本 若存在无需创建。 配置config目的在于简化ssh登录命令在当前用户 `~/.ssh/` 新建config文本 若存在无需创建。
配置如下: 配置如下:
``` ```
@ -59,32 +58,35 @@ Host zyimm
Port 22 Port 22
IdentityFile file_key IdentityFile file_key
``` ```
> 配置文本格式,只需要同级别空格对齐即可。 > 配置文本格式,只需要同级别空格对齐即可。
### HostName ### HostName
需要ssh连接过去的主机名一般是IP地址。 需要ssh连接过去的主机名一般是IP地址。
### User ### User
登录主机的用户名 登录主机的用户名
### IdentityFile ### IdentityFile
认证证书文件,默认位置是~/.ssh/id_rsa, ~/ssh/id_dsa等如果采用默认的证书可以不用设置此参数除非你的证书放在某个自定义的目录那么你就需要设置该参数来指向你的证书 认证证书文件,默认位置是~/.ssh/id_rsa, ~/ssh/id_dsa等如果采用默认的证书可以不用设置此参数除非你的证书放在某个自定义的目录那么你就需要设置该参数来指向你的证书
### Port ### Port
SSH访问主机的端口号默认是22端口同上只有在非默认情况下才需要设置该值
SSH访问主机的端口号默认是22端口同上只有在非默认情况下才需要设置该值
## 使用 ## 使用
```sh ```sh
ssh zyimm # 即可免密登陆192.168.1.1服务器了 ssh zyimm # 即可免密登陆192.168.1.1服务器了
``` ```
如果使用vscode 建议下载 Remote-ssh 扩展,搭配使用更舒服! 如果使用vscode 建议下载 Remote-ssh 扩展,搭配使用更舒服!
> 记得配置之后需要重启服务器上的ssh服务常见重启ssh服务命令如下选择其中之一即可 > 记得配置之后需要重启服务器上的ssh服务常见重启ssh服务命令如下选择其中之一即可
```sh ```sh
service sshd restart service sshd restart
systemctl restart sshd.service systemctl restart sshd.service
@ -92,6 +94,7 @@ systemctl restart sshd.service
``` ```
## 调试 ## 调试
如果在上面步骤操作完之后,仍然出现一些问题,可以在命令中带上-v以便定位问题 如果在上面步骤操作完之后,仍然出现一些问题,可以在命令中带上-v以便定位问题
```sh ```sh

View File

@ -6,9 +6,9 @@ tags: Charles
[charles 官网](https://www.charlesproxy.com/) 下载CharlesDebian系列发行版可以使用 `apt-get install charles-proxy` 安装,不过需要提前安装对应key才可以安装我这边是直接下载安装包解压安装。 [charles 官网](https://www.charlesproxy.com/) 下载CharlesDebian系列发行版可以使用 `apt-get install charles-proxy` 安装,不过需要提前安装对应key才可以安装我这边是直接下载安装包解压安装。
## 解压&安装 ## 解压&安装
```
```shell
# 下载包具体以最新版本为准 # 下载包具体以最新版本为准
tar -xvf charles-proxy-4.6.3_amd64.tar.gz tar -xvf charles-proxy-4.6.3_amd64.tar.gz
@ -18,13 +18,14 @@ mv charles /opt/
# 检查一下 charles/bin/charles 是否具有执行权限没有需要`chmod u+x` # 检查一下 charles/bin/charles 是否具有执行权限没有需要`chmod u+x`
``` ```
<!--more-->
## 创建启动图标 ## 创建启动图标
因为解压安装默认是不会生成启动图标的,所以需要单独创建 因为解压安装默认是不会生成启动图标的,所以需要单独创建
进入 `/usr/share/applications` 目录下 进入 `/usr/share/applications` 目录下
``` ```shell
cd /usr/share/applications cd /usr/share/applications
sudo touch charles.desktop sudo touch charles.desktop
@ -34,6 +35,7 @@ sudo gedit charles.desktop
``` ```
接着输入如下信息: 接着输入如下信息:
```sh ```sh
[Desktop Entry] [Desktop Entry]
Name=Charles Name=Charles
@ -46,18 +48,17 @@ Comment=Charles
Categories=Utility; Categories=Utility;
``` ```
说明一下: 说明一下:
1. Exec 是程序执行路径 1. Exec 是程序执行路径
2. Icon 图标 2. Icon 图标
3. Name 程序名称 3. Name 程序名称
其他配置说明自行百度~ 其他配置说明自行百度~
`sudo chmod u+x charles.desktop` 最后赋予执行权限,接下来在启动页面搜索`Charles` 可以启动对应程序! `sudo chmod u+x charles.desktop` 最后赋予执行权限,接下来在启动页面搜索`Charles` 可以启动对应程序!
## Charles激活 ## Charles激活
### 现成激活账号 ### 现成激活账号
@ -69,15 +70,12 @@ https://zhile.io
``` ```
### Charles在线免费工具生成一个新的注册码 ### Charles在线免费工具生成一个新的注册码
[破解网址:www.zzzmode.com](https://www.zzzmode.com/mytools/charles/) [破解网址:www.zzzmode.com](https://www.zzzmode.com/mytools/charles/)
然后打开Charles在上方菜单栏的“Help”选择“Register Charles”输入生成账号和注册码即可 然后打开Charles在上方菜单栏的“Help”选择“Register Charles”输入生成账号和注册码即可
## 参考 ## 参考
1. [知乎Charles安装与激活](https://zhuanlan.zhihu.com/p/537292816) 1. [知乎Charles安装与激活](https://zhuanlan.zhihu.com/p/537292816)

View File

@ -14,7 +14,7 @@ tags: Ubuntu
sudo apt purge $(dpkg -l|grep ^rc|awk '{ print $2 }') sudo apt purge $(dpkg -l|grep ^rc|awk '{ print $2 }')
sudo apt purge $(dpkg -l|grep iF|awk '{ print $2 }') sudo apt purge $(dpkg -l|grep iF|awk '{ print $2 }')
``` ```
<!--more-->
> 注解: > 注解:
1. `$(......)` 是一个shell表示法即里面包含括号中的命令输出的内容。 1. `$(......)` 是一个shell表示法即里面包含括号中的命令输出的内容。
2. `dpkg -l`列出系统中所有安装的软件如果是已经删除的软件有残存的配置文件那么该的软件包的状态是rc即开头显赫为rc 然后是空格然后是软件包的名称。如果是iF开头就是配置失败的软件。 2. `dpkg -l`列出系统中所有安装的软件如果是已经删除的软件有残存的配置文件那么该的软件包的状态是rc即开头显赫为rc 然后是空格然后是软件包的名称。如果是iF开头就是配置失败的软件。

View File

@ -15,14 +15,15 @@ tags: Ubuntu
```shell ```shell
lspci -k |grep Ethernet lspci -k |grep Ethernet
``` ```
显示如下: 显示如下:
```shell ```shell
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05) 01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05)
``` ```
<!--more-->
可以看到我的网卡是**Realtek Semiconductor Co., Ltd. RTL8125**,然后到供应商官网寻找对应驱动,[下载地址](https://www.realtek.com/zh/component/zoo/category/network-interface-controllers-10-100-1000m-gigabit-ethernet-pci-express-software)。 可以看到我的网卡是**Realtek Semiconductor Co., Ltd. RTL8125**,然后到供应商官网寻找对应驱动,[下载地址](https://www.realtek.com/zh/component/zoo/category/network-interface-controllers-10-100-1000m-gigabit-ethernet-pci-express-software)。
### 解压&安装 ### 解压&安装
```shell ```shell
@ -35,6 +36,7 @@ sudo ./autorun.sh
``` ```
### 检测 ### 检测
安装完毕之后,可以通过如下命令验证 安装完毕之后,可以通过如下命令验证
```shell ```shell
@ -42,4 +44,5 @@ lsmod | grep r8125
ifconfig -a ifconfig -a
``` ```
如果上述命令能正常显示有关网卡驱动信息,且系统设置界面按钮可操作则代表成功! 如果上述命令能正常显示有关网卡驱动信息,且系统设置界面按钮可操作则代表成功!

View File

@ -8,26 +8,27 @@ tags: Ubuntu
目前开发的笔记本使用的是ubuntu22.04.1 版本默认内置snap商店无法完成自身更新所以小记一下解决办法。 目前开发的笔记本使用的是ubuntu22.04.1 版本默认内置snap商店无法完成自身更新所以小记一下解决办法。
解决办法如下: 解决办法如下:
```sh
```shell
# root 账号无需加上sudo # root 账号无需加上sudo
sudo killall snap-store sudo killall snap-store
sudo snap refresh snap-store sudo snap refresh snap-store
``` ```
<!--more-->
## 禁止自动更新 ## 禁止自动更新
> 目前snap 稳定版本通道已经支持禁止自动更新如果下述命令不起作用或报错请先同上述进行snap-store自身更新 > 目前snap 稳定版本通道已经支持禁止自动更新如果下述命令不起作用或报错请先同上述进行snap-store自身更新
### 全部自动禁止更新 ### 全部自动禁止更新
```sh ```sh
snap refresh --hold snap refresh --hold
``` ```
### 禁用某个软件更新比如火狐firefox ### 禁用某个软件更新比如火狐firefox
```sh ```sh
snap refresh --hold firefox snap refresh --hold firefox
``` ```

View File

@ -24,7 +24,7 @@ win10镜像下载地址
qemu-system-x86_64 -hda ./win10.img -cdrom win10.iso -boot d -enable-kvm -machine q35 -device intel-iommu -smp 2,sockets=1,cores=2 -m 2G -vga std -net nic,model=e1000 -net user -usbdevice tablet qemu-system-x86_64 -hda ./win10.img -cdrom win10.iso -boot d -enable-kvm -machine q35 -device intel-iommu -smp 2,sockets=1,cores=2 -m 2G -vga std -net nic,model=e1000 -net user -usbdevice tablet
``` ```
<!--more-->
提示: 提示:
下次启动,移除`-cdrom win10.iso` 参数第一次需要通过cdrom镜像安装等于实际光盘安装系统 下次启动,移除`-cdrom win10.iso` 参数第一次需要通过cdrom镜像安装等于实际光盘安装系统

View File

@ -4,41 +4,42 @@ date: 2023-03-29
tags: Git tags: Git
--- ---
### 1. 查看所有本地分支 ### 1. 查看所有本地分支
```sh ```sh
git branch git branch
``` ```
### 2. 删除本地分支
### 2. 删除本地分支:
```sh ```sh
git branch -D branch_name git branch -D branch_name
``` ```
其中branch_name为要删除的分支名称。 其中branch_name为要删除的分支名称。
### 3. 查看所有远程分支 ### 3. 查看所有远程分支
```sh ```sh
$ git branch -r git branch -r
``` ```
### 4. 删除远程分支: ### 4. 删除远程分支
```shell ```shell
git push origin --delete branch_name git push origin --delete branch_name
``` ```
<!--more-->
> 如果要批量删除本地分支,可以使用以下命令: > 如果要批量删除本地分支,可以使用以下命令:
```shell ```shell
git branch | grep -v "main" | xargs git branch -D git branch | grep -v "main" | xargs git branch -D
``` ```
其中,"main"为要保留的分支名称,可以根据需要进行修改。 其中,"main"为要保留的分支名称,可以根据需要进行修改。
如果要批量删除远程分支,可以使用以下命令: 如果要批量删除远程分支,可以使用以下命令:
```shell ```shell
git branch -r | grep -v "main" | sed 's/origin\//:/' | xargs git push git branch -r | grep -v "main" | sed 's/origin\//:/' | xargs git push
``` ```

View File

@ -21,7 +21,7 @@ ssh-keygen -t rsa -C "your_email@example.com"
```sh ```sh
git config --global core.sshCommand "openssh-client -o StrictHostKeyChecking=no -i /path/to/your/key.pem" git config --global core.sshCommand "openssh-client -o StrictHostKeyChecking=no -i /path/to/your/key.pem"
``` ```
<!--more-->
1. `--global` 参数代表全局使用,不全局使用则需要进入对应本地仓库目录进行设置 1. `--global` 参数代表全局使用,不全局使用则需要进入对应本地仓库目录进行设置
2. `/path/to/your/key.pem` 是你的私钥 2. `/path/to/your/key.pem` 是你的私钥

View File

@ -23,7 +23,7 @@ EXECUTE stmt;
DEALLOCATE PREPARE stmt; DEALLOCATE PREPARE stmt;
``` ```
<!--more-->>
上述代码中的 `database_name` 替换为要操作的数据库的名称,`regex_pattern` 替换为要匹配的表名的正则表达式模式。 上述代码中的 `database_name` 替换为要操作的数据库的名称,`regex_pattern` 替换为要匹配的表名的正则表达式模式。

View File

@ -21,6 +21,7 @@ Unknown table 'COLUMN_STATISTICS' in information_schema (1109)
``` ```
经查阅相关资料得知,需要添加`--column-statistics=0`即可。我猜测的原因可能是备份数据时候在读取相关表结构没有相关权限,所以报此错误。通过添加`--column-statistics=0`进行关闭,以免报错。 经查阅相关资料得知,需要添加`--column-statistics=0`即可。我猜测的原因可能是备份数据时候在读取相关表结构没有相关权限,所以报此错误。通过添加`--column-statistics=0`进行关闭,以免报错。
<!--more-->
## column-statistics解释 ## column-statistics解释
`--column-statistics` 是一个用于输出列统计信息的选项。这个选项可以让 mysqldump 在备份数据时,输出每个表的列名、数据类型、长度、默认值、是否为 null 等信息,同时还输出了每个列的统计信息,包括平均长度、总长度、字符集、数字类型的比例等信息。 `--column-statistics` 是一个用于输出列统计信息的选项。这个选项可以让 mysqldump 在备份数据时,输出每个表的列名、数据类型、长度、默认值、是否为 null 等信息,同时还输出了每个列的统计信息,包括平均长度、总长度、字符集、数字类型的比例等信息。

View File

@ -38,7 +38,7 @@ void push(Array* arr, void* element) {
} }
arr->data[arr->size++] = element; arr->data[arr->size++] = element;
} }
<!--more-->
// 从动态数组中删除一个元素 // 从动态数组中删除一个元素
void removeElement(Array* arr, int index) { void removeElement(Array* arr, int index) {
if (index < 0 || index >= arr->size) { if (index < 0 || index >= arr->size) {

View File

@ -23,7 +23,7 @@ tags: PHP
} }
} }
``` ```
<!--more-->> <!--more-->
然后执行`composer install``composer require <your-package@dev-master>` 然后执行`composer install``composer require <your-package@dev-master>`
## 排除特定文件或目录不被自动加载 ## 排除特定文件或目录不被自动加载

View File

@ -16,7 +16,7 @@ tags: PHP
```shell ```shell
apk add libcurl curl-dev apk add libcurl curl-dev
``` ```
<!--more-->>
libcurl curl-dev 是linux下curl开发一系列依赖库和文件。http扩展需要curl所以需要安装相关依赖 libcurl curl-dev 是linux下curl开发一系列依赖库和文件。http扩展需要curl所以需要安装相关依赖
2. please install and enable pecl/raphf 2. please install and enable pecl/raphf

View File

@ -28,7 +28,7 @@ tags: PHP
public $baz; public $baz;
} }
``` ```
<!--more-->>
2. 变量以及属性多态类型优先级 2. 变量以及属性多态类型优先级
```php ```php

View File

@ -17,6 +17,8 @@ tags: 设计模式
如果一开始代码都写在一起,每种消息通知方式不同整体数据结构也大相径庭,那么后期维护可想而知 💔 。。。 如果一开始代码都写在一起,每种消息通知方式不同整体数据结构也大相径庭,那么后期维护可想而知 💔 。。。
<!--more-->
# 如何解决 # 如何解决
将每种通知方式设为一种通知策略,因此在整体模块或服务设计时候,应该做好如下几点: 将每种通知方式设为一种通知策略,因此在整体模块或服务设计时候,应该做好如下几点:

View File

@ -16,7 +16,7 @@ tags: 设计模式
1. 定义cache工厂类(父类)和依赖类 1. 定义cache工厂类(父类)和依赖类
2. 编写各个类型cache子类 2. 编写各个类型cache子类
3. cache工厂类创建调用 3. cache工厂类创建调用
<!--more-->
# 实现 # 实现
> 这边实现使用PHP代码作为演示其他oop语言逻辑类似。 > 这边实现使用PHP代码作为演示其他oop语言逻辑类似。