加密 Hyperf
Hyperf项目线上运行时,务必开启 SCAN_CACHEABLE,这样在项目启动时,只要缓存存在时,就不会实例化 BetterReflection 并扫描所有注解。
请注意加密后的文件,只能使用反射API (Reflection)获取,无法使用 php-parser
所以,在我们要加密代码时,务必按照以下步骤进行。不同的hyperf版本采取的方式不同。
2.0、 2.1
- 开启
SCAN_CACHEABLE - 执行
composer dump-autoload -o优化索引的同时删除runtime/container目录 - 执行
php bin/hyperf.php生成runtime/container,确保生成了runtime/container/proxy/目录和相关的.cache文件 - 打包所有代码,复制到另外一个目录中,对这些代码进行加密
在加密时需要注意以下问题:
- 设置加密文件黑名单,
vendor、test、config目录不加密,runtime/container/proxy目录必须加密 - 选择保留注释
- 源代码
runtime/container中的*.cache文件必须复制到加密代码的runtime/container目录下
2.2 以上版本
参考项目:https://github.com/hyperf/scan-manager-incubator
Hyperf项目线上运行时,务必开启SCAN_CACHEABLE,这样在项目启动时,只要缓存存在时,就不会再次扫描注解。
所以,在我们要加密代码时,务必按照以下步骤进行:
- 开启
SCAN_CACHEABLE - 执行
composer dump-autoload -o优化索引的同时删除runtime/container目录 - 执行
php bin/hyperf.php scan:cache生成runtime/container - 打包代码后进行加密,需要注意以下问题:
- 设置加密文件黑名单,不加密
vendor、test、config等文件夹 - 选择保留注释
- 安装好扩展后即可正常运行代码
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文件,其他模块不支持。