php 中 http_build_query 函数对空值的处理

在对接 API 接口的时候,我们常常使用 http_build_query 函数来拼接参数。但是,这个函数会对空值做过滤和转换,不小心的话,很容易踩坑。

下面演示执行:

$args = [
    'key1' => 0,
    'key2' => '',
    'key3' => '0',
    'key4' => [],
    'key5' => null,
    'key6' => false,
    'key7' => true
];
$str = http_build_query($args);
echo $str;

输出结果为...

分类至 PHP
0条评论

docker 容器内的 laravel 项目访问变慢

因为重装 win10 系统,把 Docker 也重装了一遍,安装的时候提示系统支持 WSL 2,说是比 Hyper-V 启动更快,推荐使用。居然有好处,那就勾上这个选项吧。

启用 WSL 2 后,Docker 启动确实快了很多。

但是,今天发现,容器内的 Laravel 项目变慢了!

重装系统前,Laravel 项目 API 接口访问慢的时候也就几百毫秒,而现在却要 1.7 秒左右。追踪排查,我这个接口里用到的 SQL 也不复杂啊,就是一个简单的 Select 语句,放到 phpMyAdmin 里面执行也很快,确认不是 SQL 的问题...

分类至 Docker
0条评论

git file mode change

提交代码到仓库时,发现明明没有改动的文件提示有修改,并且是很多的文件都提示有修改。

但是修改的添加行和删除行都是 0。

于是 diff 一下:

$ git diff code.c
old mode 100755
new mode 100644

 

原来是文件模式发生了变化。

想了下,可能是别人从 Mac 上提交,我在 Win 上 pull 代码,导致文件模式发生了变化。

分类至 杂项
0条评论

Excel 中真假重复的一个简单处理

Excel是我们常见的办公软件Office的三驾马车之一,另外两架自然是Word与PowerPoint了。日常办公中,基本上都离不开这3个软件的支持了。方便了工作,也方便了生活,但今天小A遇到了一个小小的问题,就是EXCEL中可能存在的真假重复项的问题。毕竟大家使用Excel的时候经常会使用条件格式中突出显示单元格规则的重复值,来让重复的项目突显出来,避免重复或者进行计数。这个问题是Excel本身设计上的一个问题,但也是比较容易解决的。

分类至 杂项
0条评论

申请免费的 Let's Encrypt 通配符 SSL/TLS 证书

Let's Encrypt 是免费、开放和自动化的证书颁发机构。由非盈利组织互联网安全研究小组(ISRG)运营。Let's Encrypt 提供的是域名验证型(DV)证书,有效期为 90 天,证书快到期时可以通过脚本自动续期。中文官网是 https://letsencrypt.org/zh-cn/。

以往我们申请 SSL 证书,通常是在 IDC 服务商的管理后台页面填写表单进行申请,而 Let's Encrypt 则是通过命令行提交申请,操作也很简单。Let's Encrypt 使用 ACME 协议来验证您对给定域名的控制权并向您颁发证书,最常用的是就是 ACME 客户端软件是  Certbot。

分类至 杂项
0条评论

mysqldump 导出 emoji 表情损坏的解决办法

默认情况下,mysqldump 会以 utf8 作为字符集执行数据导出,如果记录中存在 emoji 表情符号,有可能导出后变成问号。 对于版本 5.5.4 以上的 mysqldump,可以手动指定 utf8mb4 作为默认字符集。

mysqldump --default-character-set=utf8mb4 ...

这样导出的 SQL 就能正常保存 emoji 符号了。

分类至 MySQL
0条评论

MySQL 字段类型 TEXT 不能设置默认值

某天,给表新增一个字段,类型为 TEXT,想设置默认值为空字符串,SQL 语句如下:

ALTER TABLE `table1` ADD `content` TEXT NOT NULL DEFAULT '';

执行的时候报错了: 

#1101 - BLOB, TEXT, GEOMETRY or JSON column 'content' can't have a default value

就是说,BLOB、TEXT、GEOMETRY、JSON 这些类型的字段是不能设置默认值的。这是由于 MySQL 5.7 默认启用了严格模式导致的。

...

分类至 MySQL
0条评论

小程序中 includes 的支持

js 的 includes 方法是 ES6 标准才增加的。includes 与 indexOf 类似,用于查找,传统的 indexOf 返回的是数字下标,而 includes 返回的是布尔值。

关于 includes 的具体用法见:
1、字符串中 includes 的用法
2、数组中 includes 的用法

微信小程序中 js 数组的 includes 在一些老机型如 iOS8上并不支持,详见:小程序 JavaScript 支持情况。如果要适配老机型的话,还是用 indexOf 吧。

分类至 小程序
0条评论

Linux 系统里 Docker 容器挂载目录导致的权限问题

我们通常会将宿主机的目录挂载到容器中,这样当容器被销毁时,不至于删除一些仍有用的数据文件。在 Windows 系统安装使用 Docker 容器,挂载目录后,可以在容器里任意操作,不用担心目录权限问题。Docker 容器挂载了 Windows 目录,在容器内容可以看到,挂载的子目录权限为 777,文件的权限为 755,所有者是 root。而Linux 系统对权限比较敏感,在容器内很大概率会遇到没有写入权限的问题。简单粗暴的操作,就是在宿主机把挂载目录和文件权限全部改成 777,即可解决。另外一种解决办法...

分类至 Docker
0条评论

php.ini 配置项 max_input_vars

从 PHP 5.3.9 起,php.ini 中增加了一个配置项 max_input_vars,默认值为1000。

手册中 max_input_vars 释义如下:

接受多少 输入的变量(限制分别应用于 $_GET、$_POST 和 $_COOKIE 超全局变量)指令的使用减轻了以哈希碰撞来进行拒绝服务攻击的可能性。如有超过指令指定数量的输入变量,将会导致 E_WARNING 的产生,更多的输入变量将会从请求中截断。 

分类至 PHP
0条评论