【并不难】macOS 下编译安装 Swoole 扩展 作者: Chuwen 时间: 2021-01-09 分类: PHP 评论 **目录** [TOC] # macOS 下安装 Swoole 扩展 > 我以为会很复杂,但发现其实也并不难 ## 安装前准备 请注意 macOS 是自带了 php 7.1 的,如果你卸载了可以使用 `brew` 等方法安装,这里不做过多赘述 ## 下载 Swoole 源码 Swoole 的 GitHub 仓库地址是:https://github.com/swoole/swoole-src 源码发行版下载地址:https://github.com/swoole/swoole-src/releases 我们这里以当前最新版本**v4.6.0**为例 ```shell curl https://github.com/swoole/swoole-src/archive/v4.6.0.zip -O swoole-src-4.6.0.zip ``` ## 解压 Swoole 源码压缩包 ```shell unzip swoole-src-4.6.0.zip ``` ## 切换到 swoole-v4.6.0 目录 ```shell cd swoole-src-4.6.0 ``` ## 然后进行编译和安装 > 以下命令请一行一行执行,以 `#` 开头的是注释 ```shell phpize ./configure # 为了提升编译效率,我们可以使用多核编译 # 也就是你有多少核心就 -j核心数 # 我的 CPU 有 8 核心,那么使用 -j8 参数 make -j8 # 如果你不懂你就使用这个命令 make sudo make install ``` ## 不出意外的话,执行到最后一条命令并完成后,将出现以下类似的日志 ```log chuwen@WenzhoudeMacBook-Pro swoole-src-4.6.0 % sudo make install Password: Installing shared extensions: /usr/local/Cellar/php/8.0.0/pecl/20200930/ Installing header files: /usr/local/Cellar/php/8.0.0/include/php/ ``` ## 修改 php.ini 文件 在文件末尾追加内容 `extension=swoole.so` 即可 > **[推荐] 你可以使用 `php --ini` 命令查询 `php.ini` 所在位置** > > 一般 `php.ini` 文件在 `/usr/local/etc/php/PHP的版本/php.ini` > 比如我的 PHP 版本是 **8.0**,那么是在 `/usr/local/etc/php/8.0/php.ini` > 或者也可以使用 `find / -name php.ini` 查找 `php.ini` 所在路径 **编辑文件你可以按照你习惯的方式编辑,或者像我这样使用 `vim` 命令编辑** ```shell vim /usr/local/etc/php/8.0/php.ini # 然后按 `Shift + G`,其实就是输入 G # 即可跳转到文件最后一行 # 然后你 i 键进行编辑文件,然后你另起一行 # 写上这一行内容 extension=swoole.so # 然后按 ESC 键,输入 :wq # 按回车保存并退出编辑 ``` ## 验证是否安装成功 执行以下命令,如果出现 **swoole** 字样,代表安装 Swoole 扩展成功了 ```shell php -m | grep swoole ``` 这是我的执行结果,是安装成功了 ```log chuwen@WenzhoudeMacBook-Pro swoole-src-4.6.0 % php -m | grep swoole swoole ```
关于 PHP 插入数据库如果该接口访问多次可能会插入多次的思考 作者: Chuwen 时间: 2021-01-04 分类: PHP 评论 # 前言 今晚在搞一个用户注册的接口,突然发现如果该**注册接口**在一定的时间内访问多次,有可能注册多次,由此来水一篇文章 > 因为这是为了和同学联合做个(我负责网页端、服务端,他负责 Android 端),不能搞得太复杂比如搞个验证码、Session 验证之类的,不然一个 App 注册页面得做好久,循序渐进,先做好基础功能再做这些高级点的 # 主机配置 - Arm64 开发板(也就是**我家云**啦,2020年1月初,70+元在咸鱼捡的矿渣),1GB 内存,配置很垃圾,搭建一些小网站、测试代码还是勉勉强强的 > 在宝塔面板装了两次不同版本的,总共花费2个多小时,都失败了,太难受了。 但最后得用的 Docker,网上搜了下相关镜像,有人做了 **Arm64** 版本的 `MySQL 5.7` 的镜像,拉取镜像、配置、运行,一气呵成。 > Docker 部署确实太方便了。 > 可惜自己花费大量时间去编译装 MySQL,结果以失败告终... # 相关注册逻辑 ```php //1. 判断用户名和密码是否合规 //2. 判断该用户名是否被注册 //3. 插入数据库 //4. 判断是否注册(插入数据库)成功 ``` 这样看上去似乎没什么问题,但是当我测试的时候,一不小心多按了几次刷新,结果数据表里出现了几个一摸一样的用户名。 然后想了想这可能是因为自己主机太垃圾了,插入数据库都要执行那么久... 当然遇到这个问题,肯定是要解决的了,首先想到了用 Redis 弄一个锁,再怎么的也比主机硬盘速度快吧,然后注册完成后就删除 # 解决思路 > 然后网上搜了下,原来我这样写的方法叫**悲观锁**: > 总是假设最坏的情况,每次取数据时都认为其他线程会修改,所以都会加(悲观)锁。一旦加锁,不同线程同时执行时,只能有一个线程执行,其他的线程在入口处等待,直到锁被释放。 > > 涨知识了,这方面的知识看来还得再补补... ```php //此处省略部分代码 $RDS = new Redis(); $RDS->connect('127.0.0.1'); //1. 判断用户名和密码是否合规 //2. 检查该用户名是否正在注册中,防止一个用户名多次用户注册 if ($RDS->sIsMember("nickname", $username)) { die('对不起,你输入的用户名正由别人注册中,请稍后再试!'); } //3. 判断该用户名是否被注册 //4. 添加“用户名注册锁” $RDS->sAdd("nickname", $username); //5. 插入数据库 //6. 删除该用户名锁 $RDS->sRem("nickname", $username); //7. 判断是否注册(插入数据库)成功 ```
Laravel 中间件向控制器传入参数 作者: Chuwen 时间: 2020-12-23 分类: Laravel,其他分类 评论 ## 中间件中的handle方法 ``` $request->attributes->add(['data'=>'data]); ``` ## 控制器中要接受参数的方法 ``` function index(Request $request){ echo $request->get('data'); } ``` --- 转载自:https://www.jianshu.com/p/488b92f2015b
PHP Iterator(迭代器) 遍历值 作者: Chuwen 时间: 2020-12-04 分类: PHP 评论 # 有这么一个迭代器 ```php class myIterator implements Iterator { private $index = 0; private $data = ''; public function __construct($data) { $this->index = 0; $this->data = $data; } function rewind() { $this->index = 0; } function current() { return $this->data[$this->index]; } function key() { return $this->index; } function next() { ++$this->index; } function valid() { return isset($this->data[$this->index]); } } $it = new myIterator(array( "hello", "php", "iterator", )); ``` # 遍历取值 ## 1. while 循环♻️取值 ```php valid()){ echo "key: {$it->key()} , value: {$it->current()}".PHP_EOL; $it->next();//指向下一项 } ``` ## 2. foreach 取值 > 我们通过 `foreach` 遍历 `$it` 时,PHP 会自己依次调用: > > `rewind()` 重置到第一个元素 > `valid()` 检查当前位置是否有效 > `current()` 返回当前元素 > `key()` 返回当前元素的键 > `next()` 指向下一个元素 ```php foreach($it as $key => $value) { echo "$key : $value"; } ``` --- 部分摘抄自:https://segmentfault.com/a/1190000016475883
Laravel 安装指定版本 作者: Chuwen 时间: 2020-11-23 分类: PHP 评论 ```shell composer create-project --prefer-dist laravel/laravel blog "6.*" ```