PHP CLI 运行需满足三前提:安装 php-cli 包、CLI 专用 php.ini 启用所需扩展、脚本首行添加 #!/usr/bin/env php Shebang。

PHP CLI 模式能运行的前提是二进制文件本身可用
不是所有 PHP 安装都自带可执行的 php 命令。很多 Linux 发行版(比如 Ubuntu)把 CLI 和 Apache/FPM 模块拆成不同包,只装 php-fpm 或 libapache2-mod-php 是不够的。
必须确认系统 PATH 中存在且可执行:
which php php -v
如果报 command not found,说明 CLI 版本根本没装。Ubuntu/Debian 下要装 php-cli 包;CentOS/RHEL 8+ 需装 php-common + php-cli(或直接 dnf install php)。
CLI 模式默认禁用某些扩展和配置项
PHP CLI 和 Web SAPI(如 Apache)使用不同的 php.ini 文件,路径通常不一致:
php --ini
常见差异包括:
-
display_errors = On(CLI 默认开,Web 默认关) -
extension=opcache.so(CLI 默认不加载,避免干扰脚本调试) -
max_execution_time = 0(CLI 默认不限时,Web 默认 30 秒)
如果你的脚本依赖 pdo_mysql 却报 Class 'PDO' not found,先检查 CLI 的 php.ini 是否启用了对应 extension,而不是复用 Web 的配置。
脚本开头必须有正确的 Shebang(Linux/macOS)
想直接 ./script.php 运行,第一行必须是 Shebang,且指向真实 PHP CLI 可执行路径:
#!/usr/bin/env php注意:
- 不能写成
#!/usr/bin/php—— 路径可能因系统而异;/usr/bin/env php更可靠 - 文件需加执行权限:
chmod +x script.php - Windows 不认 Shebang,直接用
php script.php - Shebang 行末不能有多余空格或 BOM,否则报
bad interpreter
CLI 模式下 $_SERVER 和输出行为与 Web 不同
很多框架或老代码依赖 $_SERVER['DOCUMENT_ROOT'] 或 $_SERVER['REQUEST_URI'],这些在 CLI 下是空或未定义的,直接访问会触发 Notice。另外:
-
echo/var_dump()输出直接到终端,不会被 Web 服务器缓冲或截断 - CLI 没有输出缓冲自动刷新,大日志写入建议显式
flush()或用file_put_contents(..., FILE_APPEND) -
readline()、fgets(STDIN)才是标准输入方式,$_GET/$_POST全为空
一个典型坑:用 header("Location: ...") 重定向 —— CLI 下会直接报 Warning,因为无 HTTP 上下文。
