# 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");
```