01
解析与语义分析
读取 PHP 源码,构建抽象语法树,解析命名空间、类、Trait、闭包与属性声明,形成与运行时语义一致的中间表示。
从源码解析、中间表示到容器封装与运行时装载,了解 LOAKPHP 的四层保护模型与完整性机制。
层与层之间用明确的中间格式衔接,出错时能定位到具体阶段,而不是一句“加载失败”。
读取 PHP 源码,构建抽象语法树,解析命名空间、类、Trait、闭包与属性声明,形成与运行时语义一致的中间表示。
把语法树降低为自定义指令序列,合并常量、重排字面量,并保留反射所需的元数据。
指令与字面量分别编码、分区写入 LKP1 v2 容器,头部记录目标版本与摘要,最终完成封装。
loader 读取容器头、校验完整性与授权,按需还原执行单元,交回 Zend 引擎继续执行。
封装在构建环境完成;运行环境只负责校验与执行,不接触源码目录。
分区不是为了复杂,而是让装载阶段只读取真正需要的那一部分。
| 分区 | 内容 | 作用 |
|---|---|---|
| Header | 容器版本、目标 PHP 版本、SAPI 类型、构建时间 | 装载前先读,用于拒绝不匹配的运行环境 |
| Meta | 命名空间、类名、方法签名与反射所需元数据 | 保证自动加载与框架反射链路正常 |
| Code | 按函数与类拆分的指令序列 | 按需还原执行单元,避免整文件驻留 |
| Literals | 常量、字符串与数组字面量池 | 独立编码,减少明文在内存中的停留时间 |
| License | 域名、目录、到期时间与功能开关 | 参与校验,修改即失效 |
| Signature | HMAC-SHA256 摘要与容器指纹 | 装载阶段校验完整性 |
# 首次请求,loader 依次校验
[loak] header LKP1 v2 php=8.3 sapi=fpm
[loak] integrity hmac-sha256 ................ ok
[loak] license domain=example.com ......... ok
[loak] expire 2027-12-31 .................. ok
[loak] loader 1.4.2 ....................... ok
[loak] mounted 128 units in 4.7 ms
[loak] ready request handled normally
每个项目使用独立材料:ChaCha20 负责内容加密,HMAC-SHA256 负责完整性校验, 需要跨端分发时通过 X25519 完成协商。运行端只持有该项目必需的部分。
我们把可验证的约束写进装载流程,也对能力边界保持诚实。
只在执行单元装载的瞬间还原必要内容,避免整文件常驻内存。
项目保护材料不随产物完整分发,运行端只持有该项目必需的部分。
版本、完整性、授权任一校验不通过即终止装载,并返回可定位的错误码。
每个构建提供 SHA-256 指纹,下载与部署阶段均可核验。