加密 Hyperf

Hyperf项目线上运行时,务必开启 SCAN_CACHEABLE,这样在项目启动时,只要缓存存在时,就不会实例化 BetterReflection 并扫描所有注解。

请注意加密后的文件,只能使用反射API (Reflection)获取,无法使用 php-parser

所以,在我们要加密代码时,务必按照以下步骤进行。不同的hyperf版本采取的方式不同。

2.0、 2.1

  1. 开启 SCAN_CACHEABLE
  2. 执行 composer dump-autoload -o 优化索引的同时删除 runtime/container 目录
  3. 执行 php bin/hyperf.php 生成 runtime/container,确保生成了runtime/container/proxy/目录和相关的.cache文件
  4. 打包所有代码,复制到另外一个目录中,对这些代码进行加密

在加密时需要注意以下问题:

  • 设置加密文件黑名单, vendor、test、config 目录不加密,runtime/container/proxy 目录必须加密
  • 选择保留注释
  • 源代码 runtime/container中的 *.cache文件必须复制到加密代码的runtime/container目录下

2.2 以上版本

参考项目:https://github.com/hyperf/scan-manager-incubator

Hyperf项目线上运行时,务必开启SCAN_CACHEABLE,这样在项目启动时,只要缓存存在时,就不会再次扫描注解。

所以,在我们要加密代码时,务必按照以下步骤进行:

  1. 开启SCAN_CACHEABLE
  2. 执行composer dump-autoload -o优化索引的同时删除runtime/container目录
  3. 执行php bin/hyperf.php scan:cache生成runtime/container
  4. 打包代码后进行加密,需要注意以下问题:
  5. 设置加密文件黑名单,不加密vendor、test、config等文件夹
  6. 选择保留注释
  7. 安装好扩展后即可正常运行代码

hyperf 版本 3.0 以上第三步的命令为 php bin/hyperf.php,无需添加 scan:cache

注意事项

确保compiler.ini文件里面配置的加密代码的输出路径和加密项目运行的路径一致,否则可能会导致注解失效的问题。 例如,compiler.ini文件里面配置的是:

compiled_archived_path=/data/wwwroot/code.tar.gz

那么,在部署加密代码的时候,项目也要放到/data/wwwroot/下面。 原因解释:hyperf会在文件scan.cache里面缓存一些文件的绝对路径,hyperf启动的时候,会根据scan.cache文件里面的路径进行一些操作。所以,要保持路径一致。

此方法仅可用于Controller文件,其他模块不支持。

最后更新:2026-09-15