乱码导致 json_encode 失败的解决方法 发现访客日志缓存失效,定位到写入 redis 时数据经 json_encode 变成了空字符。调用 json_last_error_msg() 打印出报错信息为:"Malformed UTF-8 characters, possibly incorrectly encoded"。 解决办法是增加参数 JSON_INVALID_UTF8_IGNORE,过滤掉乱码字符: json_encode($value, JSON_INVALID_UTF8_IGNORE); 2024-09-19
极简界面内嵌B站视频 如果文章中嵌入了B站视频,但并不想引导到B站——只作为“图床”使用,可以使用极简界面。 B站官方的嵌入代码形如: 改写为: 只需要替换地址并增加两个参数,其中: 原地址:player.bilibili.com/player.html 替换为:bilibili.com/blackboard/html5mobileplayer.html 增加参数1:hideCoverInfo=1 表示隐藏播放量等信息 增加参数2:danmaku=0 表示默认关闭弹幕 原始内嵌播放器效果(增加了禁止自动播放autoplay=0): 极简内嵌播放器效果: 2024-08-28
Docker 限制容器 CPU、内存使用 服务器评分系列要统一规格为 2 核 2G,对于高配服务器用 Docker 限制容器 CPU、内存使用来模拟相近的硬件环境。CPU 限制我起先用cpus参数,后来发现cpuset-cpus更准确。下文验证了两者的区别(主机 8 核 8G,Docker 限制为 2 核 2G)。 cpus docker run -d --name server-testing --memory="2048m" --cpus="2.0" -v /docker/server_testing/result:/server_testing/result dujunio/server-testing --cpus="2.0"表示使用 200% 核心,在 8 核主机上占用 25% CPU。如上所示,实际是分配到 8 个核心,每个核心承担一部分,凑齐相当于 2 个核心的算力。 cpuset-cpus docker run -... 2024-07-07
修改兼容版 description 本站基于 js(ES2017+)DOM 渲染,对搜索引擎爬虫和非现代浏览器不友好,因此做了一个无 js 纯 html 输出的兼容版: 我没有做很多 SEO 工作,keywords、description 使用了统一的描述。结果发现百度很多结果只取 description,而未像 Google、Bing 一样生成摘要: 百度的表现令我费解,并无奈修改了兼容版文章页面,keywords 改为标签,description 改为文章截字。 2024-05-14
阿里邮箱添加DKIM 前言 DKIM 是一种电子邮件安全协议,通过消息加密认证的方式对邮件发送域名进行验证,用于检查电子邮件是否在传输过程中被篡改,保证邮件内容的完整性。 本站使用阿里云企业邮箱(免费版)发送通知邮件,添加 DKIM 可以降低被判定为垃圾邮件的概率。 发送申请 通过postmaster邮箱发送邮件至fankui@alibaba-inc.com,例如: 邮件标题:阿里邮箱DKIM申请+杜郎俊赏+dujun.io 邮件内容: 1)公司名称:杜郎俊赏 2)邮箱域名:dujun.io 添加DNS解析 几天后收到回信,根据提示在邮箱域名 DNS 增加一条 TXT 记录 default._domainkey。配置完成后回复邮件。 完成私钥配置 继续等待几天后收到私钥配置完成的通知邮件,申请流程结束。 验证 通过邮件客户端发信或者调用程序(PHPMailer)发信,自动追加了 DKIM-Signature 字... 2023-12-12
邮件中的链接被自动打开 发现问题 我有个脚本在每晚 22 - 24 点,每隔一段时间检查宝宝日记是否发表,如果未发表就给自己发一封邮件。邮件中附带一个链接,打开后会写入数据库标识,当天不再提醒。 最近发现一个问题,忘发日记在 22 点会收到一次邮件,然后就不再收到了。正常情况应该是隔段时间就收到一封,直到发表日记为止。 检查数据库发现标识被更新了,也就是链接被打开过,但是我本人并没有点击。 分析问题 根据数据库更新时间对比行为日志,发现有两种情形下邮件中的链接被自动打开了。 1. 平台自动访问邮件链接 根据日志,访问日记邮件链接的 ip 来自阿里云。我用的是阿里云的邮件推送,以前没发生过这种问题。现在猜测阿里云近期过了修改,会访问邮件中的链接。 2. 客户端自动访问邮件链接 与日记邮件类似,评论回复的通知邮件附带了取消通知的链接。对比日志发现,邮件中的多个链接在同一秒中被打开了,不像是人为操作。所以猜测有些博友的... 2023-08-30
Docker拉取被墙镜像 上个月开始,docker hub 无法访问,带来的麻烦是不能用 UI 搜索镜像,但是 docker pull 仍然可用。本以为过段时间可以恢复,结果一个月之后,今天 docker pull 也彻底不能用了。因为开源实例系列镜像托管在 docker hub,必须拉取镜像,所以用 AWS 服务器自建了仓库来中转。 AWS(境外)自建仓库 #创建仓库,对外服务暴露在 5000 端口(dujun.eu.org:5000) docker run -d -v /home/admin/docker:/var/lib/registry -p 5000:5000 --name myregistry registry #拉取 docker hub 镜像并发布到自建仓库 docker pull dujunio/php:8.1 docker tag dujunio/php:8.1 localhost:5000/d... 2023-06-21
php 双问号可以链式使用 刚才改网站代码,偶然发现 php 双问号是可以链式使用的: $ret = $a ?? $b ?? $c ?? 4; 原本我是应该加括号的: $ret = $a ?? ($b ?? ($c ?? 4)); 无心之失忘了加括号,竟然可以执行,才发现双问号可以链式使用。 之所以有这样的乌龙,是因为我这个从 php5 时代入行的古典程序员,对新的语法糖是想当然的,没有去仔细看过文档。双问号的使用习惯也是从三元式演变过来的,自然没想过还能链式使用。 用三元式表达上面的语句是这样的: $ret = isset($a) ? $a : (isset($b) ? $b : (isset($c) ? $c : 4)); php 不愧是世界上最好的语言。令人开心。 2022-11-11
JavaScript 强混淆 我的网站是纯内存缓存读 + js 渲染 spa,现在的瓶颈就是硬件配置低、带宽小,程序架构上可以说追求到极致了。其中,js 渲染是全站性能优化的关键一坏,服务器只负责吐出原始数据,而把路由解析、数据处理、布局渲染的计算压力都转嫁给了浏览器。 如此重要的前端部分我当然花了很大的心思。js 是明文的,只能做混淆。但是如果混淆得足够好,逆向成本过高,也是可以达到很好的代码保护。网上有很多 js 代码混淆的方法可以参考,但有些会让文件大小增加好几倍。这里我分享一下自己 js 强混淆的思路。 我实现 js 强混淆的关键一点就是字面量表达式。 原生写法: str.trim(); 字面量表达式: str['trim'](); 有了这个基础,混淆要做的就是进一步隐藏字符串了。我用了 ASCII 转码和 base64,使得字符基础变量简化为 64 个 base64 编码字符,以及特殊的空格和换行符。 以“我... 2022-10-19
同步ajax导致页面卡顿 我的网站在快速切换页面时,有时会卡顿甚至假死。之前我以为是带宽太小的缘故(1Mbps),直到在 MDN 查找 XMLHttpRequest 相关资料时看到这个说明: XMLHttpRequest supports both synchronous and asynchronous communications. In general, however, asynchronous requests should be preferred to synchronous requests for performance reasons. XMLHttpRequest 支持同步和异步通信。但是,一般来说,出于性能原因,异步请求应优先于同步请求。 Synchronous requests block the execution of code which causes "freezing" on t... 2022-09-18