开源算命运势测算神器:PHP源码搭建全记录
免责声明:本文仅供技术折腾,信则有,不信则跑单元测试。
演示:jjcto.com
一、为什么又是《易经》
《易》曰:“仰则观象于天,俯则观法于地。”
翻译到 2025 就是:抬头看日志,低头看代码。
程序员眼里的“象”,只有两种:
- 能写进数组的——天干地支;
- 能写进 Redis 的——运势缓存。
于是把目光锁在“八字”:
年柱、月柱、日柱、时柱,8 个 UTF-8 字符,长度固定,天然主键。
64 卦太花哨,六爻太灵活,八字最好欺负,直接 modulo 10 和 12,就能落库。
二、技术选型:极简即开源
- 纯 PHP8.2,单文件入口,连 composer.json 都没有,复制即可运行。
- 节气数据 1900-2100 年一次性写死,18 kB 数组,比一张壁纸还小。
- 缓存靠文件系统:
/tmp/bazi/{md5(八字)}.json,没有 Redis 也能活。 - 前端随便糊几行 Bootstrap,核心功能只有一个按钮:立即排盘。
三、目录结构(就 5 个文件)
fate-lite/ ├─ index.php // 路由+业务,137 行 ├─ lunar.php // 公历↔节气↔农历 ├─ bazi.php // 八字核心类 ├─ wuxing.php // 五行得分 └─ readme.md // 良心注释整个项目 11 kB,打包成 zip 比表情包还小。
四、核心代码走读(放心抄)
- 日柱公式(1900-2100 无误差)
functiongetRiZhu(int$unix):array{$anchor=strtotime('1900-01-31');$days=(int)(($unix-$anchor)/86400);$tg=['庚','辛','壬','癸','甲','乙','丙','丁','戊','己'];$dz=['子','丑','寅','卯','辰','巳','午','未','申','酉','戌','亥'];return[$tg[$days%10],$dz[$days%12]];}- 五行权重速算
constMAP=['甲'=>['木'=>3],'子'=>['水'=>3],'丙'=>['火'=>3],'巳'=>['火'=>2],// … 其余同理];publicstaticfunctionscore(array$bazi):array{$sum=[];foreach($bazias$char){foreach(MAP[$char]??[]as$w=>$s){$sum[$w]=($sum[$w]??0)+$s;}}return$sum;}- 大运顺逆
$yang=$year%2===0;$forward=($sex==='M'&&$yang)||($sex==='F'&&!$yang);$step=$forward?1:-1;三行代码解决“阳男阴女顺排”,比背口诀快多了。
五、10 分钟上线实录
- 买最便宜的 VPS,装 Debian 12 + PHP8.2-FPM,合计 60 秒。
git clone项目到/var/www,30 秒。- 配 Nginx,三行 location,30 秒。
- 浏览器访问:
http://ip/?d=1995-08-18&t=14:30&sex=F
返回:
{"bazi":["乙亥","丙申","辛巳","乙未"],"wuxing":{"金":2,"木":3,"水":2,"火":3,"土":2},"dayun":["丁酉","戊戌","己亥",…],"quote":"火木交战,利创意但忌冲动投资"}- 顺手写个 systemd timer,每天凌晨
rm /tmp/bazi/*,防止缓存爆炸。
六、给结果加点“易”味
- 自动映射 64 卦:
把五行得分最高值对应到八卦,再组合上下卦,一行 switch 返回卦名。 - 爻变彩蛋:
把当天天干作为动爻位置,前端画个 Canvas,黑白两色即可,很有极客仪式感。 - 运势文案:
提前写 12 段模板,根据得分区间strtr(),0.1 ms 出文案,比 GPT 稳定。
七、小结
《易经》讲“天行健,君子以自强不息”;
程序员讲 “while(true) { echo fix(); }”。
把八字塞进 PHP 数组,不过是另一种“观象”方式:
象在天干地支,法在 modulo 运算,君子在日志里自强不息。
源码全开源,无加密、无回调、无后门,放心部署。
如果它真能帮你赚到第一杯咖啡钱,记得在 commit 里写句
“Thank you, I Ching”——让 3000 年前的智慧也混个 contributor。