phpvault

使用文档

从打包上传到部署上线,全部步骤。认真看完这一步能省掉 90% 的来回沟通。

1. 打包前检查

把项目根目录打成 zip。三个容易出错的地方:

# 推荐的打包方式(在项目根目录)
zip -r project.zip . \
  -x 'vendor/*' 'node_modules/*' '.git/*' '.env' \
     'storage/*' 'runtime/*' 'uploads/*'

2. 上传与参数

登录后进「新建加密任务」,选项目、传 zip、勾参数。几个参数的含义:

参数说明
PHP 版本决定交付哪个版本的 .so。选错了扩展加载不上,会报 API 版本不匹配。
混淆强度轻/强两档。强混淆会改变控制流,性能开销更大,但对逆向的阻力也更大。
保留行号严格模式下报错行号仍然准确;关闭后报错行号会偏移,但逆向线索更少。
授权到期到了指定日期后,密文在运行时拒绝执行。这是运行时校验,不是文件删除。
域名绑定限定只在指定域名下运行,防止被搬到别的站。
机器码绑定限定只在指定机器上运行。换服务器需要重新加密。
路径绑定限定只能部署在指定绝对路径下。
排除规则逗号分隔的 glob,例如 config/*,tests/*。

3. 交付包里有什么

phpvault-xxxxxxxx-<keyId前8位>.zip
├── README.txt      安装说明(含你的 keyId)
├── report.json     逐文件清单:原大小 / 密文大小 / SHA256
├── enc/            加密后的项目文件(目录结构与上传的一致)
└── so/
    └── phpvault-8.3.so   与你密钥配套的扩展(可能有多份,对应不同 PHP 版本)

so/ 里的扩展是和你的密钥绑定的,不能与别人的混用,也不能用官方仓库里随便下载的版本替代。

4. 部署

把 enc/ 下的文件按原结构覆盖到你的站点目录,然后把扩展放到一个固定位置:

# 1) 放扩展(路径自定,建议独立目录)
mkdir -p /usr/local/lib/php/extensions
cp so/phpvault-8.3.so /usr/local/lib/php/extensions/

# 2) 在 php.ini 里加载(注意是 zend_extension,不是 extension)
zend_extension=/usr/local/lib/php/extensions/phpvault-8.3.so

# 3) 确认加载成功
php -m | grep -i phpvault
php -i | grep -i phpvault

加载成功会看到 phpvault 出现在模块列表里, 以及扩展打印的版本与 keyId。keyId 必须与 README 里的一致—— 不一致说明拿错了扩展,密文会被解成垃圾且不报错。

5. 常见报错

PHP Warning: Unable to load dynamic library ... phpvault.so

版本或架构不匹配。确认:① PHP 版本与文件名一致;② 是 NTS 不是 ZTS(php -i | grep "Thread Safety" 应为 disabled);③ 是 x86_64。

页面输出空白,没有报错

最可能是 keyId 不匹配 —— 扩展能加载但解不出正确内容,而这种情况是静默的。用 php -i 看扩展打印的 keyId,与 README 对比。

Fatal error: phpvault: license expired

授权到期了。这是你自己在提交任务时设的限制,需要重新加密或联系我们调整(如果套餐支持)。

Fatal error: phpvault: domain not allowed

域名绑定不匹配。检查是否换了域名、是否带了 www、是否有 CDN 回源改变了 Host。

上传时报「压缩包内含符号链接,已拒绝」

打包时排除了符号链接,或在 macOS 上用 Finder 压缩可能引入 __MACOSX。用命令行 zip 并加 -x 排除。

上传时报「文件数过多」

把 vendor/ 与 node_modules/ 排除掉。第三方依赖不需要加密,在服务器上重新安装即可。

6. 几个必须知道的限制

常见问题定价开始试用