根本原因是PHP版本<8.2、关键扩展(如php-process)未安装、禁用函数(putenv/proc_open/proc_get_status)未放开,以及SELinux策略拦截;需依次切换remi源装PHP 8.2+、安装php-process、解除禁用函数并重启PHP-FPM、配置SELinux布尔值与文件上下文。

PHP 版本和扩展是否真达标
Fedora 38 默认仓库的 php 包可能仍是 8.1(尤其未启用 remi 源时),php -v 显示 8.1.x 就直接导致 composer create-project laravel/laravel 报 “requires php >=8.2.0” 错误。
- 确认真实版本:
php -v和php --ini查加载的配置路径,避免多版本混用 - 启用 remi-8.2 或更高源:
sudo dnf install https://rpms.remirepo.net/fedora/remi-release-38.rpm,再sudo dnf module reset php && sudo dnf module enable php:remi-8.2 - 重装 PHP:
sudo dnf install php php-cli php-mbstring php-xml php-zip php-curl php-opcache php-pdo php-mysqlnd php-tokenizer php-json - 别漏掉
php-process(提供proc_open、proc_get_status等函数)——Fedora 默认不装这个包,但 Laravel Installer 和 Composer xdebug-handler 强依赖它
宝塔面板用户:禁用函数列表是罪魁祸首
即使你没用宝塔,只要 PHP 是通过宝塔安装的(常见于国内 VPS),它的默认禁用函数会直接拦停 Laravel 11 安装流程:
- 报
Call to undefined function Composer\XdebugHandler\putenv()→ 删除宝塔 PHP 设置里的putenv - 报
Call to undefined function Symfony\Component\Process\proc_open()→ 删除proc_open - 报
Call to undefined function Symfony\Component\Process\proc_get_status()→ 删除proc_get_status - 还可能遇到
exec被禁(Illuminate\Filesystem\exec()报错)→ 一并放开 - 改完必须重启对应 PHP-FPM 服务,不是只点“保存”就生效
Composer 全局安装器无法运行 laravel 命令
装完 laravel/installer 后执行 laravel new myapp 提示 command not found,本质是 Composer 的全局 bin 目录没进 PATH,或权限不对:
- 查是否真装上了:
composer global list | grep installer - 看 bin 路径:
composer global config bin-dir --absolute(通常是~/.composer/vendor/bin) - 加进 shell 配置:
echo 'export PATH="$HOME/.composer/vendor/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc - Windows 用户注意:
laravel.bat依赖系统能找到php.exe,建议把 PHP 目录加进系统 PATH,或改用composer create-project laravel/laravel myapp绕过 bat 包装器
最后但最容易忽略:SELinux 策略拦截
Fedora 默认启用 SELinux,它可能静默阻止 PHP 执行 proc_open 或写入项目目录,错误不报函数未定义,而是直接卡死或 Permission denied:
- 临时验证:
sudo setenforce 0,再试laravel new—— 如果成功,就是 SELinux 拦的 - 永久放行(推荐):
sudo setsebool -P httpd_can_network_connect 1(允许 Web 进程建子进程) - 若项目目录在非标准位置(如
/home/user/myapp),需打标签:sudo semanage fcontext -a -t httpd_sys_rw_content_t "/home/user/myapp(/.*)?" && sudo restorecon -Rv /home/user/myapp
php-process 是独立包”这三点上。解决顺序一定是:换 PHP 源 → 装 php-process → 放开禁用函数 → 检查 SELinux。跳过任意一步,都可能卡在下一个报错。


















