Drupal 8+安装因OPcache未启用被硬性拦截,需在phpinfo确认的php.ini中启用zend_extension并设opcache.enable=1,重启Apache后验证Opcode Caching为Enabled。

PHP OPcache未启用导致Drupal安装卡在“缓存检查”页
Drupal 8+ 安装器会主动检测 opcache 是否启用,没开就直接报错“PHP OPcode caching not enabled”,不让你进下一步。这不是警告,是硬性拦截——哪怕你手动跳过,后续首页也会 500 或白屏。
实操建议:
- 打开 Apache 实际加载的 php.ini(用 phpinfo.php 查 Loaded Configuration File 路径,别猜)
- 确保这行未被注释:zend_extension=php_opcache.dll(Windows)或 zend_extension=opcache.so(Linux/macOS)
- 在 [opcache] 段下补全关键配置:opcache.enable=1、opcache.memory_consumption=128、opcache.max_accelerated_files=4000
- 改完必须彻底重启 Apache:XAMPP 控制面板先点 Stop → 等状态变红 → 再点 Start
- 验证:访问 http://localhost/phpinfo.php,搜 opcache,看到 “enabled” 和对应参数值才算生效
多余PHP扩展引发Apache启动失败或500错误
很多人照着教程一股脑启用所有扩展,结果 php_opcache.dll 和 php_xdebug.dll 同时加载,或 php_curl.dll 依赖的 DLL 缺失,Apache 直接启动失败,日志里出现 PHP Startup: Unable to load dynamic library 或 Segmentation fault。
实操建议:
- 只保留 Drupal 强制依赖的扩展:extension=gd、extension=mysqli、extension=pdo_mysql、extension=mbstring、extension=fileinfo
- xdebug 临时禁用:把 zend_extension=php_xdebug.dll 行前面加分号注释掉
- 检查扩展依赖:Windows 下用 depends.exe 扫描 php_xdebug.dll,确认它要的 MSVCP140.dll 等已存在
- 启动失败时优先看 apache\logs\error.log,第一行错误就是根因,别盲目删扩展
Composer自动加载残留导致Drupal运行时报“Class not found”
从 GitHub 或旧项目复制 Drupal 核心代码时,如果带了旧版 vendor/ 目录或残缺的 autoload.php,而当前 PHP 版本又不兼容旧 Composer autoloader,就会在访问后台或运行 Drush 时爆出 Fatal error: Class 'Drupal\Core\Site\Settings' not found 这类错误。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
实操建议:
- 彻底删除 vendor/ 目录和 composer.lock
- 进入 Drupal 根目录,运行 composer install --no-dev(不是 update,避免拉取非必需包)
- 若提示 “Your requirements could not be resolved”,检查 composer.json 里的 drupal/core 版本是否匹配当前 PHP(如 PHP 8.1 不支持 drupal/core:^9.0)
- 避免用 root 用户执行 composer:Windows 下以普通用户权限运行命令行,否则生成的文件可能被 Apache 无权读取
清除OPcache后仍报旧错误,是因为APCu或Redis缓存没清
Drupal 默认启用多重缓存层:opcache 存 PHP 字节码,apcu 存运行时变量,redis(若配置)存页面与数据。只清 OPcache,APCu 里还卡着旧的路由或配置,就会继续报错。
立即学习“PHP免费学习笔记(深入)”;
实操建议:
- 清 OPcache:opcache_reset() 函数或访问 http://localhost/opcache-reset.php(需自己建个含该函数的脚本)
- 清 APCu:在 Drupal 根目录运行 drush eval "apcu_clear_cache();"(需 Drush),或写个 PHP 脚本调用 apcu_clear_cache()
- 清 Redis:若启用了 Redis 缓存,在命令行执行 redis-cli FLUSHALL
- 最保险做法:修改 settings.php 临时禁用全部缓存:$settings['cache']['default'] = 'cache.backend.null';,验证问题消失后再逐个恢复
Drupal 的缓存机制是分层咬合的,单点清理常无效;真正麻烦的不是“怎么清”,而是“清哪一层”——OPcache、APCu、Redis、Drupal Cache Backend,四者职责不同,出问题时得按错误日志里提示的类名或函数名反向定位到具体缓存层。


















