# 加密Hyperf
Hyperf项目线上运行时,务必开启 `SCAN_CACHEABLE`,这样在项目启动时,只要缓存存在时,就不会实例化 `BetterReflection` 并扫描所有注解。
所以,在我们要加密代码时,务必按照以下步骤进行。不同的`hyperf`版本采取的方式不同。
## 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`目录下
## hyperf 版本 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. 安装好扩展后即可正常运行代码
## 注意事项
确保`compiler.ini`文件里面配置的加密代码的输出路径和加密项目运行的路径一致,否则可能会导致注解失效的问题。
例如,`compiler.ini`文件里面配置的是:
```ini
compiled_archived_path=/data/wwwroot/code.tar.gz
```
那么,在部署加密代码的时候,项目也要放到`/data/wwwroot/`下面。
原因解释:`hyperf`会在文件`scan.cache`里面缓存一些文件的**绝对路径**,`hyperf`启动的时候,会根据`scan.cache`文件里面的路径进行一些操作。所以,要保持路径一致。