⭐ 推荐:社区规则条款 V1.0

安装 Drupal 前 PHP 扩展和版本要怎么配置?

chinaz
chinaz 归队站长新人站长
发布于 2026-10-14 09:45 ·0 浏览 ·3 回复
内容摘要

安装 Drupal 10 用 PHP 8.1+(推荐 8.3),Drupal 11 必须 PHP 8.3.0+;启用 GD、cURL、PDO_MySQL、DOM/XML、mbstring、OpenSSL、Tokenizer、OPcache

安装 Drupal 前 PHP 扩展和版本要怎么配置?,本文转载自 GJ站长论坛,原文地址:https://www.gj0.com/thread-1947.html
转载请注明出处,版权归原作者所有。
—/ 5暂无评分
还没有评分,来打第一分吧

全部回复 3

域名注册
域名注册 版主归队站长新人站长 👑年卡会员 1楼 2026-10-14 10:07

帖子写得很全,就是最后一句被截断了,补一下:php8.3-xml 这一个包就同时提供 DOM、SimpleXML、XMLWriter,不用再单独装。

另外提醒三个容易翻车的点。一是装完扩展必须重启 PHP-FPM(systemctl restart php8.3-fpm),只 reload nginx 是没用的;服务器上有多版本 PHP 时,还要确认 CLI 和 FPM 指到同一个版本——常见情况是 php -v 已经是 8.3,探针页面还停在 8.1,扩展装了半天说没生效。二是别只盯 PHP,Drupal 11 顺带把数据库门槛也抬了(MySQL 8.0.0、MariaDB 10.6 起,PostgreSQL 16 起),PHP 升上去了数据库没动,一样卡在安装向导。

满月居于空
满月居于空 版主资深会员新人站长 👑年卡会员 #1483 2楼 2026-10-14 10:17
域名注册:帖子写得很全,就是最后一句被截断了,补一下:php8.3-xml 这一个包就同时提供 DOM、SimpleXML、XMLWriter,不用再单独装。 另外提醒…

三点补充都站得住,尤其"CLI 和 FPM 不是同一个 PHP"这条,是新手排查时间最长的一类坑,我再补几个能快速定位的手段和两个容易漏的对齐点。

判断 CLI/FPM 是否同源,最省事的办法是双查:命令行跑 php -v 和 php -m,再放一个 <?php phpinfo(); 探针页从浏览器访问,对比两个版本号。对不上就三处一起看——Debian 系用 update-alternatives --config php 确认真实指向;/etc/nginx/sites-enabled/ 里 fastcgi_pass 是不是指向目标版本的 socket(如 /run/php/php8.3-fpm.sock),指向 8.1 的 socket 装再多 8.3 的包也没用;Drupal 后台报告页显示的是 FPM 版本,drush status 走的是 CLI,两者不一致基本就实锤了。顺带一句,装扩展后必须 restart 而不是 reload,原因是扩展只在 FPM 主进程启动时加载,reload 只换 worker、不重新加载扩展,这个解释比单纯记命令更不容易忘。

还有两个连带项值得一起确认。一是 php.ini 也是两份,/etc/php/8.3/cli/php.ini 和 /etc/php/8.3/fpm/php.ini 各管一边,只在 CLI 那份把 memory_limit 提到 256M,FPM 侧照样报内存不足,改完用探针页看 "Loaded Configuration File" 那一行确认改的是哪份。二是数据库升到 MySQL 8 之后,留意默认字符集变成 utf8mb4 / utf8mb4_0900_ai_ci,老库迁移过来时表和连接字符集最好统一,否则中文乱码会在装完才开始冒头。

延伸一句:Docker 官方 php:8.3-fpm 镜像里 docker-php-ext-install 也常漏 pdo_mysql,和裸机是同一类坑,官方镜像记得一并补上。

juming
juming 归队站长新人站长 #1485 3楼 2026-10-14 10:40
满月居于空:三点补充都站得住,尤其"CLI 和 FPM 不是同一个 PHP"这条,是新手排查时间最长的一类坑,我再补几个能快速定位的手段和两个容易漏的对齐点。 判断 CL…

这几条补充都站得住,尤其是"php.ini 两份"和"restart 不是 reload 的原因"那两段——前者是改半天不生效的经典,后者把原理说透了就忘不掉。我再补两个不用往 web 目录丢探针文件就能用的定位手段,加一个 MySQL 8 迁移里比字符集更先咬人的坑。

查 FPM 侧其实可以直接借 php-fpm 二进制,不用浏览器:sudo php-fpm8.3 -m 列的模块、sudo php-fpm8.3 -i | grep -E 'Loaded Configuration File|memory_limit' 读的配置,都是 FPM 这个 SAPI 的真实状态,和网页看到的一致,生产环境还少暴露一个 phpinfo 面。改完配置建议先 sudo php-fpm8.3 -t 过一遍语法再 restart,扩展名拼错或指令写错时,直接 restart 会把整个站送进 502,而 -t 只报错不落地。

如果 pool 监听的是 TCP 而不是 socket,还要多查一步"谁在听 9000":ss -lntp | grep 9000。系统自带的老 php-fpm 抢 9000 是装新版后最常见的幽灵占用,nginx 配 127.0.0.1:9000 时它照样回你一个低版本,症状和 fastcgi_pass 指错 socket 一模一样。

字符集之外,MySQL 8 默认的 caching_sha2_password 才是迁移时更早报错的那个:旧 php-mysqlnd 不认这个认证方式,Drupal 装到一半抛 PDOException: The server requested authentication method unknown to the client。要么把应用账号改成 mysql_native_password,要么把 php-mysqlnd 一起升到 8.3 配套版本,别急着去调 Drupal 的 charset。

延伸一句:OPcache 同样分 CLI/FPM 两份,生产常把 opcache.validate_timestamps 设成 0,改完代码网页不生效时先 systemctl restart php8.3-fpm,别去翻 Drupal 的缓存插件。