laravel 10 安装时提示 bcmath 缺失,因其虽不参与 laravel new 的强制校验,但框架运行(如 appserviceprovider 初始化、配置加载、carbon 时间格式化、金额计算)会调用 bcadd() 等函数,缺失即报错;且 cli 与 web 环境 php.ini 常不一致,需分别检查并安装启用。

Laravel 10 安装时提示 bcmath 扩展缺失,是因为虽然它不是 laravel new 命令启动阶段的硬性依赖(即不参与 ensureExtensionsAreAvailable() 的强制校验),但Laravel 10 的核心运行和常见功能实际需要它,一旦缺失,项目在启动、配置加载或执行某些操作时就会报错。
具体原因如下:
框架内部调用触发报错
Laravel 10 的config/app.php中默认启用了App\Providers\AppServiceProvider,而该服务提供者或其依赖(如Illuminate\Foundation\Application初始化流程)可能间接使用bcadd()、bccomp()等函数。只要某处代码调用了 bcmath 函数,PHP 就会抛出Call to undefined function bcadd()错误。官方虽未列在“安装前必装”清单,但属事实必需
Laravel 文档未将bcmath列入laravel new的强制扩展(ctype/filter/mbstring 等才是),但它被明确归为「项目实际开发绕不开」的扩展——尤其涉及金额计算、队列重试策略、Carbon 时间差格式化等场景。多数 Laravel 10 模板项目一运行就加载config/cache.php或config/session.php,其中可能含精度敏感逻辑,触发 bcmath 调用。-
CLI 和 Web 环境可能不一致
你用php -m | grep bcmath在终端看到已启用,不代表 Web 服务器(如 Nginx + PHP-FPM)也加载了。两者可能读取不同php.ini:- CLI 使用
/etc/php/8.2/cli/php.ini - FPM 使用
/etc/php/8.2/fpm/php.ini
缺失通常只发生在后者,导致phpinfo()页面搜不到bcmath,或访问首页直接 500。
- CLI 使用
Composer 创建项目时未拦截,但后续命令失败
composer create-project laravel/laravel myapp可能成功,但运行php artisan config:clear或php artisan serve时立刻报错,说明问题不在安装环节,而在运行时环境准备不足。
快速确认与修复方法:
-
检查 CLI 是否可用:
php -r "echo extension_loaded('bcmath') ? 'OK' : 'MISSING';" -
检查 Web 环境(建一个
info.php):<?php phpinfo();
浏览器打开,搜索
bcmath,并核对顶部 “Loaded Configuration File” 路径是否与你修改的php.ini一致。 -
Ubuntu/Debian 系统安装命令:
sudo apt-get install php-bcmath sudo systemctl restart php8.2-fpm # 或 apache2
-
CentOS/RHEL 系统:
sudo yum install php-bcmath sudo systemctl restart php-fpm
宝塔面板用户:
进「软件商店 → 找到对应 PHP 版本 → 设置 → 安装扩展 → 勾选 bcmath → 安装 → 重载配置」
不装 bcmath 不影响 laravel new 成功创建目录结构,但会让项目无法真正跑起来。它是 Laravel 10 的隐性刚需,不是可选项。











