laravel 10 要求 php ≥ 8.1 且 mbstring、openssl、pdo、tokenizer、xml、ctype、json、intl 扩展必须真实启用;仅 php -v 显示版本达标不够,须执行 php -m | grep -e "(mbstring|openssl|pdo|tokenizer|xml|ctype|json|intl)" 验证每项输出,缺一则 artisan serve 或迁移可能报错。

确认 PHP 版本和扩展是否真实启用
Laravel 10 要求 PHP ≥ 8.1,但 php -v 显示 8.1+ 并不等于能跑 Laravel——关键看扩展是否在运行时加载。Alibaba Cloud Linux 3 默认 PHP 源较旧,且 intl、mbstring、pdo_mysql 等常被禁用。
- 执行
php -m | grep -E "(mbstring|openssl|pdo|tokenizer|xml|ctype|json|intl)",缺任何一项都可能在artisan serve或迁移时报错(如Class "IntlDateFormatter" not found) - Alinux3 上装
php-intl:先确认 PHP 模块源,推荐启用 remi:dnf module install php:remi-8.2,再dnf install php-intl php-mbstring php-xml php-json php-opcache - 改完后必须重启
php-fpm(或nginx若用 php-fpm),否则扩展不生效:sudo systemctl restart php-fpm
用腾讯云镜像 + 显式版本号创建项目
直接 composer create-project laravel/laravel 在国内大概率卡住或拉到 Laravel 11(需 PHP 8.2+),而 Alinux3 默认没配 Composer 镜像,会直连 packagist.org,超时或 404 是常态。
- 先设镜像:
composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/ - 清缓存防旧包干扰:
rm -rf ~/.composer/cache - 显式指定 Laravel 10 LTS:
COMPOSER_MEMORY_LIMIT=-1 composer create-project laravel/laravel:^10.0 myapp(-1防 zlib_decode 内存溢出) - 进项目后立刻执行:
php artisan key:generate && php artisan config:clear && php artisan cache:clear,否则 .env 未生效会导致 500 错误
Nginx 配置指向 public 目录且权限对齐
Alinux3 的 nginx 默认用户是 nginx,而 Laravel 的 storage 和 bootstrap/cache 需要可写;若权限不对,访问首页报 500 且日志里只有 file_put_contents(...): failed to open stream: Permission denied。
- 查 Nginx 用户:
grep "^user" /etc/nginx/nginx.conf→ 通常是user nginx; - 把项目目录属主设为
nginx:sudo chown -R nginx:nginx /path/to/myapp - 开放 storage 和 cache 写权限:
sudo chmod -R 775 /path/to/myapp/storage /path/to/myapp/bootstrap/cache - Nginx server 块中
root必须是/path/to/myapp/public,且index后加index.php,否则静态资源 404
数据库连接失败常见于 MySQL 8 默认认证插件
Alinux3 安装的 MySQL 8 默认用 caching_sha2_password,而 Laravel 10 的 PDO 默认不兼容,报错类似 SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client。
- 登录 MySQL:
mysql -u root -p,然后执行:ALTER USER 'your_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; - 确保
.env中DB_HOST=127.0.0.1(别用localhost,否则走 socket 可能绕过认证设置) - 检查
DB_PORT=3306是否被防火墙拦截:sudo firewall-cmd --list-ports,没开就加:sudo firewall-cmd --add-port=3306/tcp --permanent && sudo firewall-cmd --reload











