解决 Spug 发布前任务出错: Exception: 'utf-8' codec can't decode bytes in position 116-117: invalid continuation byte 作者: Chuwen 时间: 2021-09-12 分类: Linux 评论 ## 环境 简单描述下我的环境,在 macOS 上装的 Docker,在 Docker 里面安装了 Spug。 然后在 Spug 添加主机,用 ssh 连接 本机,模拟相关环境构建、发布 - Docker for macOS: `Docker version 20.10.8, build 3967b7d` - Spug API版本: `v3.0.1-beta.9` - Spug Web版本: `v3.0.1-beta.9` ## 发布前任务出错 Exception: 'utf-8' codec can't decode bytes in position 116-117: invalid continuation byte ## 究其原因 直到我用 Web Console 连接本机 ssh,执行了下 `ll` 发现有的文件夹名字是 `????` 一看就发现问题了,原来是中文乱码了,我就想着报出上述的错误可能就是这个原因了。 ## 解决办法 假设你使用的是 `oh-my-zsh`,执行以下命令: ```shell vim ~/.zshrc ``` 然后在文件末尾添加上这里两句话: ``` export LC_ALL=zh_CN.UTF-8 export LANG=zh_CN.UTF-8 ``` 然后保存并退出,先按 `ESC` 然后英文输入状态下输入 `:wq`,再按 `Enter` 即可 然后使配置文件生效: ```shell source ~/.zshrc ```
Docker 获取宿主机 IP 地址 作者: Chuwen 时间: 2021-09-12 分类: Docker 评论 网上查找,都没有找到相关的 这个域名得到的就是宿主机的 IP:`host.docker.internal` 所以怎么使用应该知道了吧 ``` [root@3905274ca2a3 /]# ping host.docker.internal PING host.docker.internal (192.168.65.2) 56(84) bytes of data. 64 bytes from 192.168.65.2 (192.168.65.2): icmp_seq=1 ttl=37 time=0.173 ms 64 bytes from 192.168.65.2 (192.168.65.2): icmp_seq=2 ttl=37 time=0.524 ms 64 bytes from 192.168.65.2 (192.168.65.2): icmp_seq=3 ttl=37 time=0.248 ms 64 bytes from 192.168.65.2 (192.168.65.2): icmp_seq=4 ttl=37 time=0.515 ms ^C --- host.docker.internal ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3039ms rtt min/avg/max/mdev = 0.173/0.365/0.524/0.156 ms ```
PHPStorm 取消当新建文件时自动添加到 git(执行 git add {filename}) 作者: Chuwen 时间: 2021-09-07 分类: 软件 评论 ### PHPStorm 取消当新建文件时自动添加到 git(执行 git add {filename}) 按照如下操作即可 ![iShot2021-09-07 15.26.49.jpg](https://cdn.nowtime.cc/2021/09/07/2429317775.jpg)
编写 PHP 代码更优雅些 - 持续更新 作者: Chuwen 时间: 2021-09-05 分类: PHP技巧,PHP 评论 ### 基础 PHP 8.0 + #### 命名参数 ```php // PHP 7 htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false); // PHP 8 htmlspecialchars($string, double_encode: false); ``` ### 注解 > 现在可以用 PHP 原生语法来使用结构化的元数据,而非 PHPDoc 声明。 ```php // PHP 7 class PostsController { /** * @Route("/api/posts/{id}", methods={"GET"}) */ public function get($id) { /* ... */ } } // PHP 8 class PostsController { #[Route("/api/posts/{id}", methods: ["GET"])] public function get($id) { /* ... */ } } ``` #### 构造器属性提升 ```php // PHP 7 class Point { public float $x; public float $y; public float $z; public function __construct( float $x = 0.0, float $y = 0.0, float $z = 0.0 ) { $this->x = $x; $this->y = $y; $this->z = $z; } } // PHP 8 class Point { public function __construct( public float $x = 0.0, public float $y = 0.0, public float $z = 0.0, ) {} } ``` #### 联合类型 > 相较于以前的 PHPDoc 声明类型的组合, 现在可以用原生支持的联合类型声明取而代之,并在运行时得到校验。 ```php // PHP 7 class Number { /** @var int|float */ private $number; /** * @param float|int $number */ public function __construct($number) { $this->number = $number; } } new Number('NaN'); // Ok // PHP 8 class Number { public function __construct( private int|float $number ) {} } new Number('NaN'); // TypeError ``` #### Match 表达式 ```php // PHP 7 switch (8.0) { case '8.0': $result = "Oh no!"; break; case 8.0: $result = "This is what I expected"; break; } echo $result; //> Oh no! // PHP 8 echo match (8.0) { '8.0' => "Oh no!", 8.0 => "This is what I expected", }; //> This is what I expected ``` #### Nullsafe 运算符 ```php // PHP 7 $country = null; if ($session !== null) { $user = $session->user; if ($user !== null) { $address = $user->getAddress(); if ($address !== null) { $country = $address->country; } } } // PHP 8 $country = $session?->user?->getAddress()?->country; ``` ---- ### 枚举 1. 使用 PHP 8.1,截止到 2021年9月4日,8.1 版本未正式发布 2. 使用扩展包实现:https://github.com/myclabs/php-enum ```shell composer require myclabs/php-enum ``` ### JSON 转 Class 使得 IDEA 语法提示 > Github: https://github.com/cweiske/jsonmapper ```shell composer require netresearch/jsonmapper ``` ### 泛型 https://github.com/mrsuh/php-generics
做个 Larvel Model 插入或更新小笔记,因为犯错比较多的 作者: Chuwen 时间: 2021-09-03 分类: Laravel,PHP 1 条评论 ### Laravel 模型 新建数据 或者 更新数据 > 可能我这个方法不够优雅,欢迎批评指正 ```php first(); // 如果为空 if (is_null($content)) { // 创建模型实例 $content = new Content; $content->uid = $uid; } $content->text = '测试测试'; // 新建数据 或者 更新数据 $content->save(); } } ``` 再留个中文文档的相关链接:https://learnku.com/docs/laravel/8.x/eloquent/9406#c7d398