laravel 11部署失败主因是php 8.2+扩展未启用,而非版本不足;必须启用mbstring、openssl、pdo、tokenizer、xml、ctype、json、bcmath、fileinfo、zip、curl等全部扩展,缺一则artisan命令或路由解析直接崩溃。

PHP 8.2+ 扩展未启用是主因,不是版本不够
TencentOS 3 默认 PHP 是 8.0 或 8.1,但 Laravel 11 要求 PHP ≥ 8.2 且必须启用全部必需扩展——装了 8.2 不代表能用,mbstring、openssl、pdo、tokenizer 等缺一不可。运行 php -m | grep -E "(mbstring|openssl|pdo|tokenizer|xml|ctype|json|bcmath|fileinfo|zip|curl)",漏掉任意一项都会在 artisan 启动或路由解析阶段直接崩溃。
实操建议:
- 用
dnf module list php查看可用 PHP stream,启用 8.2+:例如dnf module enable php:remi-8.2,再dnf install php php-cli php-fpm php-mbstring php-opcache php-pdo php-mysqlnd php-xml php-json php-bcmath php-zip php-gd php-curl - 确认
php.ini中 extension 行已取消注释(如extension=mbstring),改完后重启php-fpm:systemctl restart php-fpm - 验证真实运行时环境:
php -r "echo PHP_VERSION; echo PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION;"和php --ini看加载的是哪个配置文件
Composer 3.x 未生效 + 镜像失效导致依赖卡死
TencentOS 3 自带的 composer 多为 2.x,而 Laravel 11 的 laravel/framework v11.0+ 已不兼容 Composer 2。运行 composer --version 若输出 2.x,后续 create-project 必然失败,错误常表现为 “Resolving dependencies…” 卡住数分钟,或报 Could not find package laravel/laravel。
实操建议:
- 强制升级:
php -d memory_limit=-1 /usr/bin/composer self-update --2→ 再php -d memory_limit=-1 /usr/bin/composer self-update --3(部分旧版需先升到 2.5+ 才能跳到 3.x) - 国内源必须配全:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,并确认生效:composer config -g repo.packagist - 创建项目时加
--no-interaction --prefer-dist --ignore-platform-reqs(仅临时绕过平台检查,非长期方案)
.env 未生成 + storage 权限被 SELinux 拦截
TencentOS 3 默认开启 SELinux,即使你执行了 chmod -R 775 storage bootstrap/cache,Web 进程(如 nginx + php-fpm)仍可能因策略限制无法写入 storage/logs 或读取 .env,现象是页面空白、403、或日志里反复出现 file_put_contents(/path/storage/logs/laravel.log): failed to open stream。
实操建议:
- 先确认 SELinux 状态:
sestatus,若为enforcing,临时调试可设为 permissive:setenforce 0(上线前须恢复并配策略) - 检查当前上下文:
ls -Z storage/,应为httpd_sys_rw_content_t或类似 Web 可写类型;否则手动修正:chcon -R -t httpd_sys_rw_content_t storage/ bootstrap/cache/ - 确保
.env存在且权限为644:cp .env.example .env && chmod 644 .env,再立刻运行php artisan key:generate
最易被忽略的是 SELinux 上下文和 Composer 全局配置是否真正落地——composer config -g 输出路径和实际 bin 目录不一致、php-fpm 进程没读到新 php.ini、或者 storage 目录被 chown 成 root:root 后又忘了改回 nginx:nginx,这些细节卡住就停在白屏或 500,不查日志根本看不出源头。











