多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# License 授权文件配置 加密器可以通过授权文件来管理加密代码的可运行环境。例如限制加密代码执行的 `IP`、`HOST`、`MAC`,以及过期时间。`License` 与加密代码分开使用。`PHP` 只需要加密一次,然后通过生成不同的授权文件给客户。 > 以下简称 **授权文件** ## 生成授权文件 若要使用授权文件功能,在加密代码时必须要指定 `product_name` ,授权文件的 `product_name` 必须与加密代码完全一致。有 `3` 种方法可以生成授权文件: 1. 官网 - 编译源代码:在加密代码时直接设置产品名称,然后设置 `IP`、`HOST`、`MAC`、过期时间和其他自定义信息,加密后下载到的压缩包中会同时包含加密代码和授权文件 2. 官网 - 生成 `License`:设置 `IP`、`HOST`、`MAC`、过期时间和其他自定义信息,获取 授权文件 3. 离线版加密器:使用 `swoole-compiler -t license config.ini` 生成授权文件 ## 加载授权文件 配置 `php.ini` 设置 `swoole_loader.license_files` 加载授权文件。 ```ini [swoole_loader] swoole_loader.license_files=/yourpath/licenseA,/yourpath/licenseB ``` > 使用 `php --ini` 或者在 `phpinfo()` 页面中查找 `php.ini` 所在的路径 > 请注意 `cli` 和 `php-fpm`、`apache` 可能使用的是不同的 `php.ini`,需要在对应的环境中去查看 `php.ini` 文件的真正路径 * 支持同时加载多个授权文件,通过英文逗号分割 * 多个授权文件的 `product_name` 不能重复 * `3.0` 或更高版本,使用 `swoole_loader.license_files=/yourpath/licenseA,/yourpath/licenseB` * `3.0` 之前版本,使用 `swoole_license_files=/yourpath/licenseA,/yourpath/licenseB` > 例如你的整个代码里面有 `2` 个产品 `A` 和 `B`,加密时 `product_name` 分别为 `A` 和 `B`,分别生成 `2` 个授权文件 `/yourpath/licenseA` 和 `/yourpath/licenseB`,然后配置 `php.ini` 为 `swoole_loader.license_files=/yourpath/licenseA,/yourpath/licenseB` ,`swoole_loader` 会根据产品名称找到对应的授权文件 ## 获取授权信息 使用 `swoole_get_license()` 函数可以返回所加载的授权文件,格式为: ```php array(2) { ["product_A"]=> array(5) { ["product_name"]=> string(4) "product_A" ["hostname"]=> string(9) "127.0.0.1" ["expire_at"]=> string(10) "1669976791" ["license_source"]=> string(40) "de8a1591cb2179ff6fc2e0f6a1a95a98bba9d84c" ["user"]=> string(15) "自定义内容" } ["product_B"]=> array(5) { ["product_name"]=> string(4) "product_B" ["hostname"]=> string(9) "127.0.0.1" ["expire_at"]=> string(10) "1669976791" ["license_source"]=> string(40) "de8a1591cb2179ff6fc2e0f6a1a95a98bba9d84c" ["user"]=> string(15) "自定义内容" } } ``` 动态加载授权文件 ---- >[danger] 若无法修改 `php.ini` 来加载授权,可在程序入口文件如 `index.php` 使用 `ini_set` 实现动态加载。请注意因 `PHP-FPM` 短生命周期的特性,在非常驻内存模式下,动态加载可能会带来一些额外的性能开销 ```php ini_set("swoole_loader.license_files","/yourpath/licenseA"); ```