杜郎俊赏 - dujun.io

乱码导致 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

修改兼容版 description

1771封面
本站基于 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

阿里云每日免费邮件推送终结

上周在obaby看到阿里云免费邮件推送服务要结束的消息。到阿里云后台查看,果然有一个顶部提示: 免费权益变更:自2023年8月起,每个阿里云主账户享有共2000封免费发信额度,每天最多免费发送200封(原每天 200 封免费发信额度权益不再有效)。 我从建站开始就用阿里云的免费邮件推送,主要对外提供评论回复的邮件通知,每天 200 封免费额度是够用的。现在改成总共 2000 封额度,那只能说再见了。 目前我的系统已将邮件推送改为阿里云企业邮箱 SMTP 直发。代码基于 PHPMailer 6.8.0 重写,因为我只需要实现单发 HTML 邮件,只保留了很小一部分代码。另外由于我自己的偏爱,改成了静态类。 值得一提的是,阿里云企业邮箱不会暴露服务器 ip。 回过来说阿里云结束免费邮件推送这件事,我是感到费解的。因为它存在很多年了,搜索“邮件推送”,很多结果都指向阿里云。市面上很多系统开发了阿...

2023-09-01

邮件中的链接被自动打开

发现问题 我有个脚本在每晚 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

CleanCSS - 移除未使用的 CSS 代码

cleancss-remove-unused-css封面
应用:CleanCSS 地址:https://dujun.eu.org/cleancss 功能:分析页面中引用的 CSS 文件,打包成单一的干净文件用于替换所有引用 适用:独立页面 一、缘起 我导航站用了开源项目WebStackPage,首次静态资源加载有 1.5M,一部分原因是它使用了第三方库,比如 Bootstrap。当然,第三方库只有少量代码实际被用到,所以我就想找个办法,把未使用的 CSS 代码移除,使得静态文件更小。 二、方案 很快就找到了这个网站https://unused-css.com/。它可以很好地实现我的需求,不过有一个小问题,它是收费的,最低 25 美元一个月。 Only paying users can download clean CSS files. 那怎么办呢?那就自己开发一个工具吧。 三、分析 清理 CSS 代码需要这么几步: 抓取页面 HTML 内容 找到...

2022-10-31

JavaScript 强混淆

我的网站是纯内存缓存读 + js 渲染 spa,现在的瓶颈就是硬件配置低、带宽小,程序架构上可以说追求到极致了。其中,js 渲染是全站性能优化的关键一坏,服务器只负责吐出原始数据,而把路由解析、数据处理、布局渲染的计算压力都转嫁给了浏览器。 如此重要的前端部分我当然花了很大的心思。js 是明文的,只能做混淆。但是如果混淆得足够好,逆向成本过高,也是可以达到很好的代码保护。网上有很多 js 代码混淆的方法可以参考,但有些会让文件大小增加好几倍。这里我分享一下自己 js 强混淆的思路。 我实现 js 强混淆的关键一点就是字面量表达式。 原生写法: str.trim(); 字面量表达式: str['trim'](); 有了这个基础,混淆要做的就是进一步隐藏字符串了。我用了 ASCII 转码和 base64,使得字符基础变量简化为 64 个 base64 编码字符,以及特殊的空格和换行符。 以“我...

2022-10-19

互访功能页性能优化探索

我的主力电脑是 4 核 i7 16G MacBook Pro,所以我用互访功能页开几十个页面是没压力的。收到有些博友反馈打开页面太多电脑卡死,我并不能理解。直到昨晚,我找出 2 核 i3 4G 的笔记本跑了一下,果然卡。因此有必要对互访的性能做进一步优化了。 理想的逻辑是,一次只打开 5 个页面,其他在队列中等待,每加载完一个网站,关闭当前页,打开队列中另一个网站。这样浏览器同时最多只会存在 5 个页面占用。但尝试了一下,这个方案目前无法实现,因为跨域问题。 一、窗口对象 直接用 window.open 对象,无法监听加载状态, onload 会发生跨域错误。 二、iframe 嵌入 iframe 可以 onload 监听目标网站加载状态。但问题是,如果目标网站设置禁止被嵌套,就无法访问,但也返回加载完成,这样无法正确判断网站实际上有没有被打开。 目前没有找到解决办法,只是逻辑上调整了一下...

2022-10-19

分页: 1 2 3 4 5