根本原因是Fedora 38默认PHP环境未达标且关键扩展/函数被禁用:需手动安装mbstring、openssl等扩展,修复SELinux上下文,启用proc_open等禁用函数,并正确配置APP_URL与TrustProxies。

Laravel 10 在 Fedora 38 上安装报错,根本原因不是 Fedora 本身不兼容,而是默认 PHP 环境未达标 + 关键扩展/函数被禁用。Fedora 38 自带 PHP 8.2(满足 Laravel 10 要求),但系统包管理器默认不启用所有必需扩展,且 SELinux、PHP-FPM 配置、open_basedir 等常静默拦截安装流程。
PHP 扩展缺失或未启用
Fedora 的 php 元包只装最简子集,mbstring、openssl、ctype、xml、zip 等必须手动安装:
- 运行以下命令一次性补全:
sudo dnf install php-mbstring php-openssl php-ctype php-tokenizer php-xml php-json php-pdo php-zip php-dom php-gd
- 检查是否生效:
php -m | grep -E 'mbstring|openssl|ctype'—— 缺哪个就补哪个 - 修改后必须重启服务:
sudo systemctl restart php-fpm(若用 Apache,则重启httpd)
⚠️ 常见坑:Fedora 的
php-opcache默认不装,虽非强制,但artisan serve启动慢、路由缓存失败都可能因此触发。
SELinux 阻止 Composer 写入 vendor 目录
Fedora 默认开启 SELinux,而 composer create-project 需要向项目目录写入大量文件。若当前目录上下文为 user_home_t 或 default_t,Composer 会静默失败或报 Permission denied(非传统 chmod 错误)。
- 查看当前目录 SELinux 上下文:
ls -Z - 临时放行(开发环境推荐):
sudo setsebool -P httpd_can_network_connect 1(允许网络)+sudo setsebool -P httpd_can_network_connect_db 1 - 若在
/home下安装,建议改用 Web 根目录(如/var/www/html/myapp),并设上下文为httpd_sys_content_t:sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html/myapp(/.*)?"
sudo restorecon -Rv /var/www/html/myapp
⚠️ 不要用
sudo chmod -R 777强行绕过 —— SELinux 不认这个,只会让错误更隐蔽。
PHP-FPM pool 配置禁用了 proc_open
Fedora 的 php-fpm 默认配置(/etc/php-fpm.d/www.conf)常含:
disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,proc_open,proc_get_status
其中 proc_open 和 proc_get_status 是 composer create-project 和 php artisan key:generate 必需的。
- 编辑该文件,删掉或注释掉
proc_open和proc_get_status - 保存后执行:
sudo systemctl restart php-fpm - 验证:
php -r "echo function_exists('proc_open') ? 'ok' : 'fail';"应输出ok
⚠️ 宝塔、aapanel 等面板在 Fedora 上极少适配,其自动注入的
disable_functions更容易漏查。
APP_URL 或 TrustProxies 配置导致后续请求 404/500
Fedora 常用于本地开发或内网部署,若未正确设置基础 URL,php artisan serve 可能启动成功,但访问时路由加载失败、分页链接错乱、甚至 CSRF token 不匹配。
- 确保
.env中APP_URL=<a href="https://www.php.cn/link/fcbb3a1c04ec11f1506563c26ca63774">https://www.php.cn/link/fcbb3a1c04ec11f1506563c26ca63774</a>(不要留空或写127.0.0.1) - 若通过 Nginx 反代(如用
localhost/myapp),需在App\Http\Middleware\TrustProxies.php中显式配置:protected $proxies = '*';
protected $headers = \Illuminate\Http\Request::HEADER_X_FORWARDED_ALL;
- 同时检查 Nginx 的
fastcgi_param SCRIPT_NAME是否被错误覆盖(尤其子目录部署时)
⚠️ 这类问题不会阻断安装,但会让“安装成功后打不开首页”成为 Fedora 用户最困惑的一环。


















