License 授权文件配置
加密器可以通过授权文件来管理加密代码的可运行环境。例如限制加密代码执行的 IP、HOST、MAC,以及过期时间。License 与加密代码分开使用。PHP 只需要加密一次,然后通过生成不同的授权文件给客户。
以下简称 授权文件
生成授权文件
若要使用授权文件功能,在加密代码时必须要指定 product_name ,授权文件的 product_name 必须与加密代码完全一致。有 3 种方法可以生成授权文件:
- 官网 - 编译源代码:在加密代码时直接设置产品名称,然后设置
IP、HOST、MAC、过期时间和其他自定义信息,加密后下载到的压缩包中会同时包含加密代码和授权文件 - 官网 - 生成
License:设置IP、HOST、MAC、过期时间和其他自定义信息,获取 授权文件 - 离线版加密器:使用
swoole-compiler -t license config.ini生成授权文件
请注意HOST限制仅支持php-fpm模式下使用,Swoole或Workerman等其他Cli常驻内存框架需要自行实现
加载授权文件
配置 php.ini 设置 swoole_loader.license_files 加载授权文件。
[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/licenseB3.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() 函数可以返回所加载的授权文件,格式为:
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) "自定义内容"
}
}
动态加载授权文件
若无法修改 php.ini 来加载授权,可在程序入口文件如 index.php 使用 ini_set 实现动态加载。请注意因 PHP-FPM 短生命周期的特性,在非常驻内存模式下,动态加载可能会带来一些额外的性能开销
ini_set("swoole_loader.license_files","/yourpath/licenseA");
捕获异常
可捕获证书过期、HOST/Mac/IP 不匹配的错误,自行实现对用户友好的错误展示。
try {
include "/path/to/your_encrtyped_php_file.php";
} catch(\swoole_loader_exception $e) {
// 存在证书匹配错误的问题
echo $e->getMessage();
}