uos 10.1需手动升级php至8.2+、composer至3.x,并启用intl等扩展;创建项目必须用composer create-project laravel/laravel:^11.0 --no-interaction,进目录后立即执行php8.2 artisan key:generate && config:clear && cache:clear。

UOS 10.1(基于 Debian 12)能跑 Laravel 11,但默认 PHP 和 Composer 版本大概率不满足要求——必须手动升级 PHP 到 8.2+、Composer 到 3.x,并显式启用 intl 等扩展,否则 composer create-project 直接失败或项目启动后报错。
确认并升级 PHP 至 8.2+,且 extension 全部就位
UOS 10.1 默认源里的 php 包是 8.1 或更低,Laravel 11 启动前就会拒绝运行。不能只看 php -v 输出,得验证扩展是否真实加载:
- 执行
sudo apt update && sudo apt install php8.2-cli php8.2-mbstring php8.2-xml php8.2-curl php8.2-sqlite3 php8.2-intl php8.2-zip php8.2-gd php8.2-bcmath php8.2-opcache - 检查是否启用:
php8.2 -m | grep -E "(mbstring|intl|curl|xml|sqlite3)",每项都必须有输出 - 关键点:
php8.2命令可能不在$PATH,需软链:sudo update-alternatives --install /usr/bin/php php /usr/bin/php8.2 82,再sudo update-alternatives --config php切换 - intl 扩展在 UOS 上常缺依赖,若报
PHP Warning: Module 'intl' already loaded in Unknown on line 0或直接不出现,补装:sudo apt install libicu-dev && sudo pecl install intl,然后在/etc/php/8.2/cli/php.ini末尾加extension=intl.so
强制使用 Composer 3.x,禁用旧版残留
UOS 自带的 composer 通常是 2.x,而 Laravel 11 的 composer.json 显式依赖 Composer 3 的插件机制,create-project 会卡在 “Resolving dependencies” 或直接报 Your requirements could not be resolved:
- 卸载系统包:
sudo apt remove composer - 用官方安装脚本装 Composer 3:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer - 验证:
composer --version必须输出Composer version 3.x,不是2.5.x - 若仍调用旧版,检查
which composer和echo $PATH,确保/usr/local/bin在前面
创建项目时必须加 --no-interaction 并立刻生成密钥
在 UOS 终端里不加 --no-interaction 运行 composer create-project laravel/laravel blog,表面成功,实则 .env 是空的、APP_KEY 是占位符,后续所有加密、Session、CSRF 都失效:
- 正确命令:
composer create-project laravel/laravel blog --no-interaction - 进目录后立即执行:
cd blog && php8.2 artisan key:generate(注意用php8.2而非php,避免调错版本) - 接着清缓存:
php8.2 artisan config:clear && php8.2 artisan cache:clear - 若提示
Class "App\Providers\AppServiceProvider" not found,说明自动加载没刷新,补一句:composer dump-autoload
启动前检查 .env 和数据库驱动兼容性
UOS 10.1 默认没装 MySQL 或 PostgreSQL,多数人用 SQLite 快速验证。但即使不用数据库,php8.2 artisan serve 启动后访问 http://127.0.0.1:8000 报 500,往往是因为 .env 里 DB_CONNECTION=mysql 却没装 php8.2-mysql 扩展:
- 开发阶段推荐先切 SQLite:
DB_CONNECTION=sqlite,并确保database/database.sqlite存在且可写:touch database/database.sqlite && chmod 664 database/database.sqlite - 若要用 MySQL,除了装
php8.2-mysql,还得确认 MySQL 8.0+ 默认认证插件是caching_sha2_password,PDO 不支持,需在 MySQL 里改用户:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; -
APP_URL务必设为http://localhost:8000,别用127.0.0.1,否则 Chrome 下 CSRF token 会静默失效
最易被忽略的是 PHP CLI 版本和 Web 服务器(如 Apache/Nginx)使用的 PHP SAPI 版本不一致——你在终端跑通 php8.2 artisan serve,不代表用 Nginx + PHP-FPM 部署时也 OK。UOS 上建议统一用 php8.2-fpm 并确认 Nginx 的 fastcgi_pass 指向 127.0.0.1:9000 或对应 socket 路径。











