# 加密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`文件里面的路徑進行一些操作。所以,要保持路徑一致。