最近把服务器上的站点从宝塔面板迁移到了1Panel 面板,原本运行正常的 API 站点直接报错,核心原因就是依赖的XLoader 扩展装不上,折腾了快一小时才搞定,特意记录下踩坑和解决过程,给同样迁移的朋友避坑。
过程
我的站点核心依赖 PHP 的 XLoader 扩展,宝塔面板里一键安装 XLoader 毫无压力,迁移到 1Panel 后,PHP 环境正常,但站点直接提示XLoader extension not loaded,第一步自然是去 1Panel 后台装扩展。
1Panel 的 PHP 管理界面自带 XLoader 扩展选项,本以为一键安装就能解决,结果点了安装后:
面板显示安装成功
刷新 PHP 信息,XLoader 扩展压根没加载
站点依旧报错,纯纯的无效安装
这时候就放弃了面板一键安装,打算手动编译 / 上传 XLoader 文件安装,这也是第二个坑的开始。
宝塔里手动装扩展的习惯是:
下载对应 PHP 版本的 XLoader.so 文件
上传到 PHP 扩展目录
在 php.ini 里写绝对路径加载扩展
我照着这个思路操作:
下载了 PHP8.2 对应的 XLoader.so
上传到目录:
/opt/1panel/runtime/php/PHP82/extensions/no-debug-non-zts-20220829/在 php.ini 里添加配置:
extension = /opt/1panel/runtime/php/PHP82/extensions/no-debug-non-zts-20220829/XLoader.so
重载 PHP 配置后,直接报错:找不到该扩展文件 / 目录,反复检查路径、权限都没问题,就是加载失败。
冷静下来想了想,宝塔是原生环境,1Panel 是容器化部署,这就是核心区别。
容器化的 PHP,根本识别不了宿主机的绝对路径,它只会读取容器内的扩展默认目录。
于是我打开 php.ini,翻了翻面板已经安装好的其他扩展(apcu、redis、memcached 等),写法全是这样:
extension="apcu.so"
extension="memcached.so"
extension="redis.so"
extension="imagick.so"
extension="igbinary.so"
没有任何绝对路径,只写扩展文件名 + 引号。
照着其他扩展的格式,我把之前的绝对路径配置删掉,替换成一行:
extension="XLoader.so"
保存 php.ini,重载 PHP 配置,再刷新 PHP 信息,XLoader 扩展直接加载成功!站点瞬间恢复正常。
总结
放弃绝对路径:1Panel 的 PHP 是容器化环境,不要写宿主机的物理路径,容器识别不到
标准写法:直接用
extension="扩展名.so",和面板自带扩展保持一致文件位置:XLoader.so 必须上传到 PHP 的默认扩展目录(面板一键安装其他扩展的同级目录)
避坑关键:从宝塔迁移过来,千万别用原生面板的操作习惯,容器化是最大的区别
如果大家也遇到 1Panel 安装 XLoader / 其他自定义 PHP 扩展失败,优先检查配置写法,别再踩容器化路径的坑了!
默认评论
Halo系统提供的评论