[{"data":1,"prerenderedAt":166},["ShallowReactive",2],{"content:\u002F1panel-php-xloader":3,"surround:\u002F1panel-php-xloader":156},{"id":4,"title":5,"body":6,"categories":128,"comment":130,"date":131,"description":132,"donation":130,"draft":133,"extension":134,"image":135,"meta":136,"navigation":130,"path":142,"permalink":143,"postfooter":130,"published":143,"readingTime":144,"recommend":143,"references":143,"seo":149,"sitemap":150,"stem":151,"tags":152,"type":154,"updated":143,"__hash__":155},"content\u002Fposts\u002F1Panel-PHP-XLoader.md","1Panel 面板安装 PHP XLoader 扩展踩坑实录",{"type":7,"value":8,"toc":125},"minimark",[9,13,21,24,27,30,33,36,39,42,45,48,51,54,61,64,74,77,80,83,86,92,95,98,103,106,109,116,119,122],[10,11,12],"p",{},"最近把服务器上的站点从宝塔面板迁移到了1Panel 面板，原本运行正常的 API 站点直接报错，核心原因就是依赖的XLoader 扩展装不上，折腾了快一小时才搞定，特意记录下踩坑和解决过程，给同样迁移的朋友避坑。\n过程",[10,14,15,16,20],{},"我的站点核心依赖 PHP 的 XLoader 扩展，宝塔面板里一键安装 XLoader 毫无压力，迁移到 1Panel 后，PHP 环境正常，但站点直接提示",[17,18,19],"strong",{},"XLoader extension not loaded","，第一步自然是去 1Panel 后台装扩展。",[10,22,23],{},"1Panel 的 PHP 管理界面自带 XLoader 扩展选项，本以为一键安装就能解决，结果点了安装后：",[10,25,26],{},"面板显示安装成功",[10,28,29],{},"刷新 PHP 信息，XLoader 扩展压根没加载",[10,31,32],{},"站点依旧报错，纯纯的无效安装",[10,34,35],{},"这时候就放弃了面板一键安装，打算手动编译 \u002F 上传 XLoader 文件安装，这也是第二个坑的开始。",[10,37,38],{},"宝塔里手动装扩展的习惯是：",[10,40,41],{},"下载对应 PHP 版本的 XLoader.so 文件",[10,43,44],{},"上传到 PHP 扩展目录",[10,46,47],{},"在 php.ini 里写绝对路径加载扩展",[10,49,50],{},"我照着这个思路操作：",[10,52,53],{},"下载了 PHP8.2 对应的 XLoader.so",[10,55,56,57],{},"上传到目录：",[58,59,60],"code",{"code":60},"\u002Fopt\u002F1panel\u002Fruntime\u002Fphp\u002FPHP82\u002Fextensions\u002Fno-debug-non-zts-20220829\u002F",[10,62,63],{},"在 php.ini 里添加配置：",[65,66,71],"pre",{"className":67,"code":69,"language":70},[68],"language-text","extension = \u002Fopt\u002F1panel\u002Fruntime\u002Fphp\u002FPHP82\u002Fextensions\u002Fno-debug-non-zts-20220829\u002FXLoader.so\n","text",[58,72,69],{"__ignoreMap":73},"",[10,75,76],{},"重载 PHP 配置后，直接报错：找不到该扩展文件 \u002F 目录，反复检查路径、权限都没问题，就是加载失败。",[10,78,79],{},"冷静下来想了想，宝塔是原生环境，1Panel 是容器化部署，这就是核心区别。",[10,81,82],{},"容器化的 PHP，根本识别不了宿主机的绝对路径，它只会读取容器内的扩展默认目录。",[10,84,85],{},"于是我打开 php.ini，翻了翻面板已经安装好的其他扩展（apcu、redis、memcached 等），写法全是这样：",[65,87,90],{"className":88,"code":89,"language":70},[68],"extension=\"apcu.so\"\n\nextension=\"memcached.so\"\n\nextension=\"redis.so\"\n\nextension=\"imagick.so\"\n\nextension=\"igbinary.so\"\n",[58,91,89],{"__ignoreMap":73},[10,93,94],{},"没有任何绝对路径，只写扩展文件名 + 引号。",[10,96,97],{},"照着其他扩展的格式，我把之前的绝对路径配置删掉，替换成一行：",[10,99,100],{},[58,101,102],{"code":102},"extension=\"XLoader.so\"",[10,104,105],{},"保存 php.ini，重载 PHP 配置，再刷新 PHP 信息，XLoader 扩展直接加载成功！站点瞬间恢复正常。\n总结",[10,107,108],{},"放弃绝对路径：1Panel 的 PHP 是容器化环境，不要写宿主机的物理路径，容器识别不到",[10,110,111,112,115],{},"标准写法：直接用 ",[58,113,114],{"code":114},"extension=“扩展名.so”","，和面板自带扩展保持一致",[10,117,118],{},"文件位置：XLoader.so 必须上传到 PHP 的默认扩展目录（面板一键安装其他扩展的同级目录）",[10,120,121],{},"避坑关键：从宝塔迁移过来，千万别用原生面板的操作习惯，容器化是最大的区别",[10,123,124],{},"如果大家也遇到 1Panel 安装 XLoader \u002F 其他自定义 PHP 扩展失败，优先检查配置写法，别再踩容器化路径的坑了！",{"title":73,"searchDepth":126,"depth":126,"links":127},4,[],[129],"技术",true,"2026-05-02 13:14:00","站点从宝塔迁移至1Panel后，API站点报错，XLoader扩展无法正常加载。面板一键安装显示成功但未生效，手动使用宿主机绝对路径配置扩展也加载失败。根源在于1Panel的PHP为容器化环境，无法识别宿主机路径。将配置改为仅填写扩展文件名，把扩展文件放置在PHP默认扩展目录，重载配置后扩展加载成功，站点恢复。",false,"md","https:\u002F\u002Fimg-upyun.chario.cn\u002Fi\u002F2026\u002F10\u002F17\u002F858975.webp",{"aside":137,"slots":141},[138,139,140],"toc","meta-aside-foo","meta-aside-bar",{},"\u002F1panel-php-xloader",null,{"text":145,"minutes":146,"time":147,"words":148},"4 min read",3.455,207300,691,{"title":5,"description":132},{"loc":142},"posts\u002F1Panel-PHP-XLoader",[153],"1Panel","tech","z0SQ3CKok2OsmcqLYnasMo43xr16cwrh1XsNX5g1ntM",[157,161],{"title":158,"path":159,"stem":160,"date":131,"type":154,"children":-1},"1Panel部署Halo容器反复重启问题解决","\u002F1panel-halo","posts\u002F1Panel-Halo",{"title":162,"path":163,"stem":164,"date":131,"type":165,"children":-1},"杀死那个石家庄人","\u002F10","posts\u002F杀死那个石家庄人","story",1792244425922]