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 生成授权文件

请注意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/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() 函数可以返回所加载的授权文件,格式为:

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(); 
}

最后更新:2026-09-15