phpenv 不能直接安装 flarum,因其仅为 php 版本管理工具,不具备包管理或应用部署功能;flarum 必须在满足扩展(fileinfo、curl 等)、函数启用(putenv 等)和 web 服务器配置的环境下,通过 composer 手动部署。

phpenv 本身不直接安装 Flarum,它只负责管理 PHP 版本;Flarum 必须在满足条件的 PHP 环境中,用 composer create-project 手动部署。 直接指望 phpenv install flarum 这类命令是行不通的。
为什么不能用 phpenv 直接装 Flarum
phpenv 是个版本切换工具,不是包管理器或应用部署器。它的职责只有三件事:编译 PHP、列出已装版本、让 php 命令指向某个指定版本。Flarum 是一个 Laravel 衍生的 PHP 应用,依赖 Composer 安装、Web 服务器路由、数据库和正确的扩展支持 —— 这些都不在 phpenv 能力范围内。
-
phpenv install 8.1.10只会编译并安装 PHP 8.1.10 二进制,不会碰你的网站目录 - 即使你用
phpenv global 8.1切换成功,php -v显示对了,也仍需手动配 Nginx/Apache、建数据库、开扩展、跑 Composer - 若跳过
phpenv直接用系统 PHP(如宝塔自带),只要版本和扩展符合要求,反而更省事
用 phpenv 部署 Flarum 的真实流程
你得把 phpenv 当作“PHP 环境底座”,再叠加其他必要组件。关键点在于:确保当前 shell 下的 php 和 composer 都走的是 phpenv 管理的版本,否则 Composer 可能调用系统默认 PHP(比如 /usr/bin/php),导致扩展缺失报错。
- 先确认生效:运行
which php,输出应为~/.phpenv/shims/php;运行php -m | grep curl确保curl、mbstring、openssl、pdo_mysql等扩展已启用 - Composer 必须与当前
phpenv版本绑定:不要用系统级全局 Composer(如 /usr/local/bin/composer),推荐用curl -sS https://getcomposer.org/installer | php在项目目录下生成php composer.phar,然后始终用php composer.phar调用 - 创建空目录,cd 进去,执行:
php composer.phar create-project flarum/flarum . --stability=beta - Flarum 要求 Web 根目录为
/public,Nginx 配置里root必须指向该路径,且需配置重写规则(否则 404)
常见报错和绕过方式
用 phpenv 管理 PHP 后仍卡在 Composer 安装环节,大概率是扩展或函数限制问题 —— 这和是否用 phpenv 无关,而是 PHP 配置本身没达标。
-
Your requirements could not be resolved...+ext-curl * -> it is missing:说明当前phpenv编译的 PHP 没带 cURL。解决方法是重装该版本时加--with-curl=/usr(Ubuntu/Debian 下先sudo apt install libcurl4-openssl-dev) -
proc_open(): fork failed:服务器内存不足或 ulimit 限制太严,不是phpenv的锅,但容易误判。可临时用ulimit -n 65536提高文件描述符上限 -
putenv() has been disabled:这是 PHPdisable_functions设置导致的,和phpenv无关。需编辑对应 PHP 版本的php.ini(路径类似~/.phpenv/versions/8.1.10/etc/php.ini),删掉putenv,然后重启 PHP 进程(如果用了 php-fpm)
要不要坚持用 phpenv 管 Flarum 环境
除非你同时维护多个 PHP 版本的 Flarum 测试站(比如一个跑 8.0 兼容插件,一个跑 8.3 测新特性),否则纯生产部署没必要引入 phpenv。它增加了编译、配置、路径排查三层复杂度,而宝塔、Docker 或直接 apt 安装的 PHP 已足够稳定。
真正容易被忽略的是:Flarum 对 opcache 和 fileinfo 扩展有硬依赖,且必须关闭 pcntl_signal 禁用(否则后台队列失败),这些细节在 phpenv 编译时若没显式开启,上线后就会静默出错 —— 不是报错停住,而是功能异常,比如上传附件失败、通知不触发。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











