Linux终端下执行PHP脚本的基本方式是使用php script.php命令,前提是已安装PHP CLI并配置到PATH中;支持相对或绝对路径,无需chmod +x;若含shebang且已赋权,也可用./script.php运行。

php 命令执行脚本的基本方式
Linux 终端下直接运行 PHP 脚本,核心就是用 php 命令解释器加载并执行文件。前提是系统已安装 PHP 且 php 在 $PATH 中(通常 Ubuntu/Debian 安装 php-cli 包,CentOS/RHEL 安装 php-common 或完整 php 包)。
最简执行命令:php script.php
- 脚本无需可执行权限(
chmod +x不必要),php是解释器,不是靠 shebang 启动 - 路径可以是相对路径(如
php ./src/test.php)或绝对路径(如php /var/www/app/index.php) - 如果脚本开头写了
#!/usr/bin/env php,且已chmod +x script.php,也可直接./script.php—— 但本质仍是调用php,只是由 shell 自动识别解释器
常见报错:Command 'php' not found
说明 PHP CLI 没装或没进环境变量。别急着重装,先确认:
- 运行
which php或command -v php,看是否返回路径(如/usr/bin/php) - 若无输出,Debian/Ubuntu 执行
sudo apt install php-cli;CentOS/RHEL 8+ 用sudo dnf install php-cli,7 用sudo yum install php-cli - 某些最小化安装的系统可能只装了 Apache 模块版 PHP(
libapache2-mod-php),它不提供命令行php可执行文件 - 装完后检查版本:
php -v,确保输出类似PHP 8.1.27 (cli)—— 注意括号里必须有cli,否则不是命令行版本
脚本运行时卡住或无输出
多数情况不是语法错误,而是脚本逻辑或 I/O 行为导致的假“卡死”:
立即学习“PHP免费学习笔记(深入)”;
- 检查是否有阻塞式操作:比如
fgets(STDIN)在等用户输入,但你没敲回车;或sleep(30)真在睡 - 输出被缓冲:CLI 模式默认开启 output buffering,
echo "done";可能不立即显示。加flush();和ob_flush();强制刷新,或开头加ob_end_flush(); - 脚本含 Web 相关函数(如
$_SERVER['REQUEST_URI'])或依赖 Apache 环境变量,CLI 下这些变量为空或未定义,可能引发 Notice 或逻辑跳转异常 - 用
php -l script.php先做语法检查,避免 parse error 静默失败
传参和 stdin 的正确用法
CLI 下参数传递和输入流处理和 Web 环境完全不同:
- 命令行参数通过
$argv数组获取:php script.php arg1 arg2→$argv[0]是script.php,$argv[1]是arg1 - 不要用
$_GET或$_POST—— CLI 没有这些超全局变量 - 读取标准输入(比如管道或重定向)用
fgets(STDIN)或file_get_contents('php://stdin');注意STDIN是资源句柄,不能直接 echo - 想让脚本支持
cat data.json | php script.php,就得主动读php://stdin,而不是假设参数里有文件名
复杂点在于:不同 PHP 版本对 CLI 输入缓冲、信号处理、进程退出码的默认行为略有差异,尤其涉及 fork、pcntl 或长时间运行任务时,得显式调用 exit(0) 或 die() 确保进程干净结束。



















