FrankenPHP 不提供独立 php 命令,仅新增 frankenphp 命令;它内置 PHP 运行时用于 Web 服务(frankenphp php-server)或脚本执行(frankenphp php-cli),但不替代系统 PHP CLI;开发仍需单独安装 php-cli(如 brew install php 或 apt install php-cli)以支持 Composer、Artisan 等工具。

FrankenPHP 安装后为什么找不到 php 命令
FrankenPHP 不是 PHP 的替代解释器,它不提供独立的 php CLI 二进制。你装完 frankenphp,系统 PATH 里新增的是 frankenphp 这个命令,而不是 php —— 它压根没动你原有的 PHP 环境。
它的定位是「Web 应用服务器」,不是「PHP 运行时分发包」。所以:
-
frankenphp php-server启动的是内置 PHP 运行时的 HTTP 服务(等价于 Nginx + PHP-FPM) -
frankenphp php-cli /path/to/script.php是调用其内嵌 PHP 执行脚本,但这个能力只在 FrankenPHP 自身进程内生效,不暴露为全局php - 你本地原有的
php(比如通过 apt/brew 安装的)依然存在,FrankenPHP 不会覆盖或卸载它
想用 php 命令怎么办
如果你需要在终端直接运行 php --version 或跑 Composer、Artisan 等工具,必须单独安装 PHP CLI。FrankenPHP 不附带这个。
常见做法:
立即学习“PHP免费学习笔记(深入)”;
- macOS:用 Homebrew 装一个干净的 PHP:
brew install php(注意别和 FrankenPHP 的frankenphp命令冲突) - Linux:用系统包管理器,如 Ubuntu:
sudo apt install php-cli - Windows:从 windows.php.net 下载 ZIP 包,解压后把
php.exe所在目录加进 PATH - 开发时建议保持「FrankenPHP 负责运行 Web 请求」+「独立 PHP CLI 负责本地开发/构建」的分工
frankenphp php-cli 和系统 php 有啥区别
关键差异不在功能,而在运行上下文和配置:
-
frankenphp php-cli script.php使用的是 FrankenPHP 内置的 PHP 运行时,加载的是它自带的php.ini(路径通常藏在二进制内部),扩展也仅限它编译时启用的那批(比如默认含opcache,但未必有gd或mbstring) - 系统
php加载的是你本地php.ini,扩展由你手动启停,更灵活,也更容易调试 - 两者
phpinfo()输出完全不同,尤其Loaded Configuration File和extension_dir字段 - 不要指望
frankenphp php-cli能替代 Composer 全局安装或 Laravelartisan的交互式命令 —— 它适合轻量脚本,不是开发环境主力
容易被忽略的一点:worker 模式下根本不用 php 命令
当你开启 worker 模式(比如 Laravel 项目配 worker { file "public/worker.php" }),整个应用常驻内存,不再走传统 CLI 生命周期。此时连 frankenphp php-cli 都用不上 —— 请求进来直接由已加载的 PHP 实例处理。
这意味着:部署阶段你可能仍需系统 php 来跑 composer install、php artisan config:cache;但运行阶段,FrankenPHP 自己消化一切,php 命令退居幕后,甚至可以不装。



















