杜郎俊赏 - dujun.io

rtrim 的坑

线上报 500 错误,定位到是 json 解析失败,特定内容存在乱码,而造成乱码的是原因是 rtrim 截取中文字符时末位可能乱码。 替代方法: function r_trim($content, $tail) { $len = mb_strlen($tail, 'utf-8'); return $tail == mb_substr($content, -$len, $len, 'utf-8') ? mb_substr($content, 0, -$len, 'utf-8') : $content; }

2019-02-01

VirtualBox 回收虚拟磁盘空间

先标记闲置空间。 windows虚拟机里使用软件sdelete: sdelete -z c:\ linux虚拟机里执行: sudo dd if=/dev/zero of=zero.fill sudo rm -f zero.fill 压缩 vdi 格式虚拟磁盘,如果是 vmdk 格式,可以先中转成 vdi: VBoxManage clonehd path.vmdk path.vdi --format vdi VBoxManage modifyhd path.vdi --compact VBoxManage clonehd path.vdi path.vmdk --format vmdk 如果报 uuid 已存在,则做如下修改: VBoxManage internalcommands sethduuid path.vmdk {uuid}

2018-12-28

762封面
一个柜子装了一晚上,手工能力退化了。

2018-02-25

防恶意压测

限制同 ip 每秒不超过 20 个请求,nginx 配置: http { limit_req_zone $binary_remote_addr zone=shagon:10m rate=20r/s; server { limit_req zone=shagon burst=5 nodelay; …… } …… } http_load 返回 https://dujun.io: byte count wrong

2018-02-08

debian部署

个人环境部署 apt-get install sudo apt-get install vim vim /etc/sudoers #增加 shagon ALL=(ALL:ALL) NOPASSWD:ALL sudo vim /etc/vim/vimrc #去掉 syntax on 前的注释 set tabstop=4 set softtabstop=4 colorscheme desert vim /home/shagon/.ssh/authorized_keys #增加本地密钥 #安装 oh-my-zsh sudo apt-get install zsh sudo apt-get install git sh -c "$(wget https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)" s...

2017-10-30

mysql 列值转换和统计

将 user_sample uid 201608 201609 201610 201611 张三 iPhone mi mi Google 李四 mi mi Google Google 王五 Google mi iPhone iPhone 转换为 phone_result uid iPhone mi Google 张三 1 2 1 李四 0 2 2 王五 2 1 1 sql 如下: drop table if exists tmp; drop table if exists phone_result; create table tmp as select uid, `201608` as brand, `201608` as month from `user_sample`; insert into tmp select uid, `201609` as brand, `201609` as...

2017-09-13

691封面
自己动手

2017-09-04

62进制转换

//十进制转为 62 进制 function encode62($number) { $base = 62; $index = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $ret = ''; for ($t = floor(log10($number) / log10($base)); $t >= 0; $t--) { $a = floor($number / pow($base, $t)); $ret .= substr($index, $a, 1); $number -= $a * pow($base, $t); } return $ret; } //62 进制转为十进制 function decode...

2017-08-31

646封面
发现最近还有些访问来自 typecho 论坛,所以特地解释一下,本站已经不是 typecho 系统,是我用 yaf 框架重新开发的。 3 月份发帖时,本站是基于 typecho 二次开发的,去除了所有我不需要的功能。后面几个月业余时间,时不时地又改了很多东西。 但是 typecho 非 MVC 模式和一些设计思路,我个人感到很别扭,导致二次开发的效率不高。最终决定推倒重来,两周就撸了基于 yaf 框架的现在的系统。当然,效率高主要得益于前面的二次开发已经全新封装了大部分的类库。 样式设计,特别是后台设计,参照了 typecho,在【关于】中有声明。 做这个站纯粹自娱自乐,主要记录宝宝的成长,让不在身边的爷爷奶奶每天看到宝宝照片。但是很长时间里,我饶有兴趣写代码完善这个站,做好了却没兴趣写文章,做了个本末倒置的博客。 考虑这个站的用途和访问量的话,完全过度开发了。很大程度上是把它做成一点技术...

2017-05-29

建站之天气获取

写文章时自动抓取当前天气,找了几个 api 都不靠谱,直接采集中国天气网的数据。 例如采集富阳的天气地址: $url = 'http://www.weather.com.cn/weather/101210108.shtml'; $raw = file_get_contents($url); $raw = str_replace("\n", '', $raw); if (preg_match('', $raw, $match)) { //匹配到天气文字 }

2017-05-26

分页: 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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71