sorshion's blog


  • 首页

  • 分类

  • 归档

  • 关于

  • 搜索

浅谈mysql的行数据删除

发表于 2022-10-13 | 分类于 mysql | 阅读次数:

什么是硬删除,什么是软删除

用无间道做例子

状态标记位还是独立字段

禁用和删除的区别 - 不同角色之间的显示不同

参考:

Mysql软删除的痛点

简单的变量占位

发表于 2021-05-13 | 分类于 php | 阅读次数:

网上看的

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
<?php
/**
* 用上下文信息替换记录信息中的占位符
*/
function interpolate($message, array $context = array())
{
// 构建一个花括号包含的键名的替换数组
$replace = array();
foreach ($context as $key => $val) {
// 检查该值是否可以转换为字符串
if (!is_array($val) && (!is_object($val) || method_exists($val, '__toString'))) {
$replace['{' . $key . '}'] = $val;
}
}

// 替换记录信息中的占位符,最后返回修改后的记录信息。
return strtr($message, $replace);
}

// 含有带花括号占位符的记录信息。
$message = "User {username} created";

// 带有替换信息的上下文数组,键名为占位符名称,键值为替换值。
$context = array('username' => 'bolivar');

// 输出 "User bolivar created"
echo interpolate($message, $context);

session和token

发表于 2021-05-06 | 分类于 个人经验 | 阅读次数:

session 和 token ,在我看来,没啥不同,都是一种客户端和服务端保持链接得一种解决方案,只不过 session 由服务器帮我解决好了,而 token 则需要自己来处理

当然还是有区别的,比如 session 就要解决跨域等问题

session 更多的是,单机时代的一种解决方案,而 token 更适应现在的使用场景

session和cookie

一般来说 浏览器中的 cookie 中会存有 session_id,如果禁止 cookie 使用,可以在 url 链接中带有 session_id

session分布式解决方案

一般来说 session 都是保存在一台服务器的文件目录上,为了达到分布式效果,有几种方案。

  • session 目录共享,oss 或者挂载
  • 现在的大部分php框架,都支持不同的 session驱动,可以把 file 驱动,替换成 redis, 这样子就可以支持分布式了
  • session 保存到 mysql 中

当然还有其他的方案,其中的效果和优缺点,只有实际使用才能真正知道了。

token的使用

在 restful,前后端分离项目中,token 还是比较好用的,毕竟大部分的 session,还是依赖 cookie,而在app端没有 cookie 这个东西(存疑,毕竟我不了解app), token 可以自定义的 uuid,也可以 jwt。

如何使用手机app进行pc登录

发表于 2021-04-27 | 分类于 业务方案 | 阅读次数:

提供一种通用的设计

后端只需提供3个接口,分别是 getUuid,isLogin,loginByQrcode

第一步

pc端切换到二维码扫码界面时,请求getUuid接口, getUuid接口生成一个uuid,存入到redis中,可设置过期时间

1
2
3
// 伪代码
$uuid = uniqid();
redis->set($uuid, 'login', 60 * 5)

第二步

PC前端一直轮询isLogin接口,isLogin接口判断uuid是否过期,判断是否uuid是否还未被二维码扫码,判断uuid的值是否已经跟token关联

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 伪代码
$uuid = input('uuid');
if (empty($uuid)) {
return '参数错误';
}
$token = redis->get($uuid);
if (empty($token)) {
return '二维码超时';
}
if ($token == 'login') {
return '手机还未扫码';
}

return $token

第三步

手机端已登录情况下扫码,获取到二维码的信息,即uuid,然后通过loginByQrcode接口,把token跟uuid信息关联到redis中

1
2
3
4
5
6
7
8
9
10
11
// 伪代码
$uuid = input('uuid');
$token = input('token');

$uuid = redis->has($uuid);
if (empty($uuid)) {
return '二维码过期,请刷新页面';
}
// 获取用户信息

redis->set($uuid, $token, 60 * 5)

使用PHPCompatibility+PHP_CodeSniffer进行PHP版本的兼容性检查

发表于 2020-12-18 | 分类于 php | 阅读次数:

使用

编写composer.json

1
2
3
4
5
6
7
8
9
10
11
{
"require-dev": {
"squizlabs/php_codesniffer": "3.*",
"phpcompatibility/php-compatibility": "*"
},
"prefer-stable" : true,
"scripts": {
"post-install-cmd": "\"vendor/bin/phpcs\" --config-set installed_paths vendor/phpcompatibility/php-compatibility",
"post-update-cmd" : "\"vendor/bin/phpcs\" --config-set installed_paths vendor/phpcompatibility/php-compatibility"
}
}

composer update

运行

./vendor/bin/phpcs --standard=PHPCompatibility --runtime-set testVersion PHP版本 project_php --extensions=php --report=summary --report-file=/log_path

文档

PHP版本的兼容性检查

php数组的一些应用

发表于 2019-09-11 | 分类于 php | 阅读次数:

php 数组很好很强大,下面展示一些个人常用到的事例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$example = [
0 => [
'id' => 1,
'name' => 'alpha',
'age' => 18,
],
1 => [
'id' => 22,
'name' => 'berry',
'age' => 28,
],
2 => [
'id' => 33,
'name' => 'cherry',
'age' => 38,
]
];

返回二维数组指定的列的集合

array_column($example, 'id')

1
2
3
4
5
6
Array
(
[0] => 1
[1] => 22
[2] => 33
)

传递指定的两个字段,并按照指定的字段组成新的一维数组

array_column($example, 'name', 'id');

1
2
3
4
5
6
Array
(
[1] => alpha
[22] => berry
[33] => cherry
)

二维数组,指定值作为key

array_column($example, null, 'id')

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Array
(
[1] => Array
(
[id] => 1
[name] => alpha
[age] => 18
)

[22] => Array
(
[id] => 22
[name] => berry
[age] => 28
)

[33] => Array
(
[id] => 33
[name] => cherry
[age] => 38
)

)

获取二维数组指定key的汇总

1
2
3
4
$sum = array_sum(array_map(function($val) {
return $val['age'];
}, $example));
echo $sum; \\ 84

博客使用方式

发表于 2019-03-31 | 分类于 博客操作 | 阅读次数:

Github 上 Hexo 项目源码以及发布版管理

  • 分享链接1
  • 分享链接2

常用指令

1
2
3
hexo g // 生成静态网页
hexo s [-p port] // 以本地预览效果
hexo d // 上传到 github,node 版本为12

有用的文章(长期更新)

发表于 2019-03-31 | 分类于 第三方精华文章 | 阅读次数:

设计模式

  • csdn规速

    该作者文章的写作方式,值得学习

vagrant安装与使用

发表于 2018-05-29 | 分类于 环境配置 | 阅读次数:

推荐使用docker,此种方式已不适合时代

网上充斥着vagrant安装教程,个人感觉比较简陋,在使用过程中,我把产生的问题,梳理一遍。

注:以下操作都是在windows下,其他系统不做参考

1. 安装virtualbox

安装完毕后,最好修改虚拟电脑位置,vagrant 默认安装在C盘,一般来说C盘都比较小,放在更大空间的盘符里比较合适
操作:打开管理器 => 管理 => 全局设定 =>常规 => 默认虚拟电脑位置(假设D:\virtualbox_vms)

2. 安装vagrant

正常来说,vagrant命令会自动加载到环境变量里面,若没有,则重新安装,或者参考网上系统变量加载方式

3. 配置vagrant

  1. 项目主路径 D:\vagrant_project
  2. 虚拟电脑路径 D:\virtualbox_vms
  3. 从http://www.vagrantbox.es/下载合适的box,这里以centos7为例,放在D:\vagrant_project下
3.1 快捷键win+R,输入cmd后切换到 D:\vagrant_project\test01下

test01是项目名

3.2 vagrant box add test01 D:\vagrant_project\centos-7.0-x86_64.box
3.3 vagrant init // 初始化

此时产生Vagrantfile,这里面可以修改参数,比如改变内存大小,通过ip访问等等

3.4 vagrant up // 启动
3.5 vagrant ssh

或者3.3步之后修改Vagrantfile,配置ip,就可以通过第三方ssh软件登陆

3.6 vagrant halt // 关机
3.7 其他命令,自行查找,eg:vagrant reload,vagrant box list 等

4. 扩容box

一般下载的box空间都不大,这个时候需要扩容

参考:
https://gist.github.com/christopher-hopper/9755310
http://blog.csdn.net/zxjxingkong/article/details/62419379 (main)

5. 打包

5.1 如果网络模式是 private_network 的话,在打包之前需要清除一下private_network的设置,避免不必要的错误

rm -f /etc/udev/rule.d/70-persistent-net.rules

5.2 vagrant package –output mycentos.box –base centos

centos根据具体名称

sorshion

sorshion

好好学习,天天向上

9 日志
7 分类
9 标签
GitHub
© 2022 sorshion
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.4