企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] ## 常见问题 1. 报错:**"load file /www/wwwroot/some_file.php failed, Error: %s [%d]"** >[info] 确认`some_file.php`的文件权限是否正确,或者查看文件是否有损坏的情况(加密之后很多FTP工具会导致文件损坏)。 2. 报错: **"the code encrypt by php 7.1 , but the loader version is 5.6"** >[info] 加密时候的版本号要和解密端(运行加密的php代码的机器)的php版本号对应上。 3. 安装 loader 扩展后 运行一个非常简单逻辑的加了密的 php 代码 报"segment fault"或"Allowed memory size of xxxx"错误 >[info] 1. 确保你的php没有安装incube loader、xdebug、zend guard loader扩展。 > 2. 确保swoole_loader的版本和加密器的版本对应上,例如1.9版本的加密器对应1.9版本的loader。 > 3. 确保你的php是非`Debug`版本,使用 `php -i | grep "Debug Build"`查看是否有`Debug Build => yes`,`Swoole Compiler`不支持`Debug`版本,请安装非`Debug`版本的`PHP` 4. 报错:**"PHP Fatal error: Unknown: product xxxxxxx can not find in license file in Unknown on line 0 Fatal error: Unknown: product xxxxxxx can not find in license file in Unknown on line 0"** >[info] 添加授权信息后加密的代码包里面会包含一个 `license` 授权文件,`loader` 端需要在`php.ini`中添加以下配置: `swoole_loader.license_files=/yourpath/swoole-compiler.license` >[danger] `yourpath` 为存放 `license` 授权文件的路径 5. 访问提示:"Swoole_loader ext not installed" >[info] 1.确认你的 `swoole_loader` 扩展是否安装成功 > 2.确认你的PHP版本、加密器版本以及 `swoole_loader` 的版本是否一致 6. 报错:**"Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 18446744072850426110 bytes) in Unknown on line 0"** >[info] 错误原因:加密器版本和loader版本不一致 解决办法:加密器版本和loader版本对应上即可 7. 报错:"Fatal error: Unknown: the license config file format error , use ini format and do not modify it in Unknown on line 0 " >[info] 错误原因:license文件上传损坏,可使用md5sum或sha1sum查看对比 解决办法:更换上传文件的工具,推荐scp等 8. 多个 license 文件,配置正常却报错"Fatal error" >[info] 错误原因:可能 `product_name` 存在相同,导致无法正常匹配`license`文件 解决办法:使用`swoole_get_license()`函数打印配置信息,查看是否相同,如果相同需要修改product_name后重新生成license 9. license 文件加载报错 **"the file xxxx.license can not access"** >[info] 错误原因1:确保存在此license文件,并且PHP项目有权限读取 错误原因2:确保php.ini的open_basedir设置正确,能读取到这个license所在目录 10. 形如以下报错,找不到函数或者找不到类的属性,并且属性名或者函数名是乱码的 ```php Call to undefined method Drupal\user\Entity\User::PUF`BTBxUMD() ``` >[info] 请先确认源代码是否运行正常,即查看源代码中是否存在对应的函数名或属性名。如果存在并且是最新版本的loader扩展,请联系微信客服。 11. 加密时报错: ```bash swoole_encrypt_file(): file /tmp/swoole_encrypt/services/gis/lib/Slim/Router.php have been encode, skip it ``` 请查看相关目录中的文件是否存在已经被加密过的代码,可以在PHP源码目录使用`grep -R "SWOOLEC" ./`进行查找。 ## FTP 工具 推荐使用 scp、winscp、宝塔,禁止使用 filezilla >[danger] 使用winscp时需要将传输模式改为**二进制文件** ![](https://img.kancloud.cn/b3/55/b35560b0c75e3a2dd1f18b70d8b4bbf9_1056x692.png) ## loader 扩展兼容性 因为 `swoole_loader` 无法和 `xdebug`、`ioncube`、`zend guard loader`、`swoole_tracker` 扩展兼容,使用前需要先卸载。 在`mips`架构或`UOS`系统下,`swoole_loader`和`opcache`冲突,使用前需要先卸载。 ## 使用 Swoole Compiler 是否会降低性能 Swoole Compiler 不存在运行时解密还原 PHP 源代码的逻辑,二进制目标文件只有经过处理的 opcode 二进制指令和内存数据,在第一次运行时将指令和数据载入内存,处理请求时没有任何性能消耗。 ## 是否有绑定客户端机器 Mac 地址或域名功能 试用版本不支持此功能。正式版已经支持。 ## Swoole Loader 与 Opcache `Swoole Compiler` 软件本身就是将 PHP 代码编译为经过特殊处理的`opcode`,所以使用`Swoole Loader`加载程序时,不需要其他`OpCache`扩展,包括`opcache`、`apc`、`ZendGuardLoader`、`eAccelerator`等扩展。 如果你的应用程序中,同时有加密代码和非加密代码。当`swoole_loader`发现是非加密代码时,会将编译控制权转给`opcache`,由`opcache`实现代码的加载。 ### `Opcache JIT` 引起的 `502` 问题 **请注意 `Opcache JIT` 与 `Swoole Loader` 存在不兼容,若要同时使用 `swoole_loader` 和 `opcache` 时必须要修改 `php.ini` 关闭 `opcache.jit`** ```ini opcache.jit=0 ``` ## 加密器与 Composer 现代的 php 项目大部分都用 composer 做依赖管理,需要注意的是如果你的项目加密后执行`composer install`有可能出现问题,因为 composer 会分析你的项目所有的类并生成 autoload_classmap.php。如果加密的代码 composer 是无法分析的,会导致无法加载类。 解决方案:先 composer install 拉下来 vender 目录 再进行加密,加密的时候可以通过白名单来排除 vendor 目录,或者连着 vendor 一起加密也可以(vendor 非常大的话会比较慢) ## 关于文件软链接 不要在项目中有软链接,否则在线加密会丢失文件,本地加密也会丢失软链(直接把软链接的文件当做了真实的文件) 如报错: ``` swoole_encrypt_file(): open file error (in /tmp/compiler/xxxx/public/storage) (out /tmp/swoole_encrypt/public/storage): No such file or directory ``` >[danger] 这里的`storage`就是个软链接,删除掉重新加密即可。 ## 配置文件格式或PHP代码格式错误 1. 离线版在加密时指定了配置文件,但是却提示`出错了:未找到,请检查swoole-compiler的安装情况`,请确定改配置文件格式是否为 `unix` 格式; 2. 如果某个文件加密不了,请检查该文件的PHP语法是否正确以及文件格式是否为 `unix` 格式; 可能是在 Windows 下编辑上传到 Linux,导致文件格式为`DOS`格式 ## 数据类型移植 如果`loader`是跑在`ARM`上的,那么在编译`PHP`的时候需要加上`-fsigned-char`选项。在`PHP`的`Makefile`里面,找到`CFLAGS`,然后追加一个`-fsigned-char`。 例如,原来的`CFLAGS`是这样的: ```Makefile CFLAGS = $(CFLAGS_CLEAN) -prefer-non-pic -static ``` 那么你需要改成: ```Makefile CFLAGS = $(CFLAGS_CLEAN) -prefer-non-pic -static -fsigned-char ``` 如果之前编译过`PHP`,你需要重新编译`PHP`: ```bash make clean && make && make install ``` >[danger] 注意:一定要执行 make clean ## `CentOS 8` 安装时提示依赖检测失败,缺少 `libnsl.so.1` 执行以下命令即可。 ```shell dnf install libnsl ```