Drupal 9/10 在 XAMPP 上无法运行主因是 PHP 扩展未启用(PDO、mysqli)、MySQL 字符集非 utf8mb4、认证插件不兼容或缓存配置缺失;需手动启用扩展、修改 my.ini 与 php.ini 并创建专用数据库用户。

Drupal 9/10 在 XAMPP 上跑不起来,多半不是 Drupal 本身的问题,而是 PHP 扩展没配对、数据库驱动没加载,或者 MySQL 配置不兼容。XAMPP 自带的 MySQL 和 PHP 默认能跑 Drupal,但开箱即用≠开箱即稳定——尤其当你启用了 Drupal 的多语言、缓存后端或 Composer 自动加载时,几个关键扩展和配置点必须手动核对。
确认 PHP 已启用 PDO 与 MySQLi 扩展
Drupal 8+ 强制依赖 PDO(尤其是 PDO_MySQL),且默认使用 mysqli 作为备用连接方式。XAMPP 的 php.ini 里这两项常被注释或顺序错乱:
-
extension=php_pdo.dll必须启用,且位置靠前(在所有 PDO 子驱动之前) -
extension=php_pdo_mysql.dll和extension=php_mysqli.dll都要启用;只开一个可能让 Drupal 安装器卡在“数据库连接测试”页 - 如果用的是 MySQL 8.0+,确保
mysql.default_socket指向 XAMPP 的 socket 文件(Windows 下通常忽略,Linux/macOS 需设为/opt/lampp/var/mysql/mysql.sock)
MySQL 字符集必须设为 utf8mb4
Drupal 9.5+ 要求数据库默认字符集为 utf8mb4,否则安装过程会报错 “The database must support the utf8mb4 character set”,或后续出现 emoji、中文搜索异常。
XAMPP 8.0.30 是一款免费、开源的跨平台 Web 服务器集成包,专为快速搭建本地 PHP 开发环境而设计。该版本核心组件包括:Apache 2.4.56、MySQL 8.0.33、PHP 8.0.30、phpMyAdmin 5.2.1 等。它支持 Windows、Linux 和 macOS 系统,可让开发者在个人电脑上轻松模拟服务器环境,无需复杂配置即可运行 WordPress、Thin
- 编辑
XAMPP\mysql\bin\my.ini(Windows)或/opt/lampp/etc/my.cnf(Linux/macOS) - 在
[mysqld]段下添加两行:character-set-server = utf8mb4collation-server = utf8mb4_unicode_ci - 重启 MySQL 服务,执行
mysql -u root -e "SHOW VARIABLES LIKE 'character_set_server';"确认返回值是utf8mb4
Drupal 安装时提示 “Database connection failed”
常见于三种情况:权限、socket 路径、或 MySQL 8 默认认证插件不兼容。
- 不要用
root用户直连 Drupal —— 创建专用用户:CREATE USER 'drupal'@'localhost' IDENTIFIED BY 'your_pass';GRANT ALL ON drupal_db.* TO 'drupal'@'localhost';FLUSH PRIVILEGES; - MySQL 8 默认用
caching_sha2_password插件,PHP 7.4+ 虽支持,但 XAMPP 自带旧版libmysqlclient可能握手失败;临时降级:ALTER USER 'drupal'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_pass'; - Windows 下若用 TCP 连接(host=127.0.0.1),确保 MySQL 没绑定到
skip-networking;Linux/macOS 若用 Unix socket,Drupal 安装界面的 “Host” 字段留空或填localhost,别填127.0.0.1
启用 OPcache 和 APCu 提升性能
Drupal 启用页面缓存、自动加载优化后,opcache 是刚需;APCu 则用于存储 Drupal 的本地缓存(如容器编译结果)。XAMPP 默认只启用 opcache,但常被注释或参数过小:
- 确认
extension=php_opcache.dll(Windows)或extension=opcache.so(Linux/macOS)已启用 - 在
php.ini中调整:opcache.memory_consumption=128opcache.max_accelerated_files=4000opcache.revalidate_freq=60 - APCu 需手动下载 DLL(Windows)或编译(Linux/macOS);XAMPP 不自带。启用后,在 Drupal 的
settings.php中加入:$settings['container_yamls'][] = 'sites/default/services.yml';并在services.yml中启用apcu缓存后端
最容易被忽略的是 MySQL 的 wait_timeout 和 max_allowed_packet:Drupal 导入大模块或运行 Drush 命令时,超时或包过大直接中断连接。这两个值在 my.ini 里默认偏低,建议调至 wait_timeout = 28800 和 max_allowed_packet = 64M。


















