Ubuntu 22.04 上直接执行 PHP 脚本必须安装 php-cli,否则 php 命令不存在;CLI 使用独立的 php.ini(/etc/php/8.1/cli/php.ini),与 Web 环境分离;执行方式包括 php /path/to/script.php、chmod +x + shebang 或 /usr/bin/php 绝对路径调用,cron 中需用绝对路径并注意工作目录和环境变量。

php 命令不存在?先确认并安装 php-cli
Ubuntu 22.04 默认不自带 php 命令(除非你装过 web 服务器相关包)。运行 php -v 报错 command not found 是最常见的起点。
- 先检查是否已安装 CLI 版本:
dpkg -l | grep php-cli - 没输出就说明没装,执行:
sudo apt install php-cli - 注意:这个包会拉取系统默认 PHP 版本(当前是 PHP 8.1),不会装 Apache 模块或 FPM,纯命令行用途
- 验证:
php -v应输出类似PHP 8.1.2 (cli)
执行 script.php 的三种可靠方式
只要 php-cli 已就位,以下方法都有效,区别在于权限、路径和可移植性。
-
php /path/to/script.php—— 最稳妥,不依赖文件权限或 shebang,适合调试、CI/CD 或 cron -
chmod +x script.php后加 shebang:#!/usr/bin/env php,再运行./script.php—— 适合写成工具脚本,但要注意/usr/bin/env php是否真能定位到 CLI 二进制(某些自编译 PHP 可能不匹配) - 直接用完整路径调用解释器:
/usr/bin/php script.php—— 绕过 PATH 查找,适合多版本共存时精确控制
web 服务器下执行 ≠ 命令行执行
很多人混淆这点:把 script.php 放进 /var/www/html/ 并用浏览器访问 http://localhost/script.php,走的是 Apache/Nginx + PHP-FPM 或 mod_php 流程,和终端里 php script.php 完全是两套环境。
- Web 下执行受
php.ini(如/etc/php/8.1/apache2/php.ini)控制;CLI 下读的是另一份(/etc/php/8.1/cli/php.ini) - 扩展启用状态可能不同:比如
php -m | grep pdo和phpinfo()页面显示的模块列表常不一致 - Web 请求有超时、内存限制(
max_execution_time)、POST 数据解析等额外约束;CLI 默认无这些限制
cron 执行失败?优先检查环境变量和路径
写进 crontab -e 的 php /path/to/script.php 很容易静默失败,根本原因几乎总是:
立即学习“PHP免费学习笔记(深入)”;
- cron 使用最小化 shell 环境,
$PATH不含/usr/bin—— 解决方案:用绝对路径/usr/bin/php - 脚本里用了相对路径(如
require 'config.php'),cron 当前工作目录不是你预期的 —— 解决方案:在脚本开头加chdir(__DIR__);或用绝对路径加载 - CLI 的
php.ini关了某些扩展(如openssl),而脚本恰好依赖它 —— 查看php --ini确认加载的配置文件,再比对php -m
php.ini 是分离的,改了一个不影响另一个;cron 不继承你的 shell 环境变量,必须显式声明或使用绝对路径。



















