You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP CLI脚本STDIN输入问题:持续读取命令至空输入退出

PHP CLI 脚本:持续读取输入直到空行退出的实现

先梳理你原代码里的几个问题:

  • $argv 索引错误:$argv[0]是脚本名,第一个传入参数是$argv[1],你写的argv[2]不仅索引错误,还缺失了$符号
  • if语句语法错误:if (argv[2] == "-d" 既未闭合括号,也没加花括号包裹代码块
  • 空输入判断逻辑问题:fgets读取的内容会包含换行符,直接用empty判断空行(仅按回车)会不生效,需要先做trim处理

下面是修正后的完整实现,同时支持启动时未传参数的补录,以及持续读取用户输入直到空行退出:

<?php
// 处理启动参数:未传则让用户输入补全
if (sizeof($argv) <= 1) {
    echo "请输入初始参数(如-d):";
    $initialArg = trim(fgets(STDIN));
    if (empty($initialArg)) {
        echo "参数不能为空,程序退出\n";
        exit(1);
    }
} else {
    $initialArg = $argv[1];
}

// 根据初始参数给出反馈
echo "{$initialArg} was entered\n";

// 持续读取用户输入
$stdin = fopen('php://stdin', 'r');
while (true) {
    $line = trim(fgets($stdin));
    // 空输入则退出程序
    if (empty($line)) {
        fclose($stdin);
        exit(0);
    }
    
    // 解析输入的命令与参数,执行对应操作
    $parts = explode(' ', $line, 2);
    $command = $parts[0];
    $param = $parts[1] ?? '';
    
    // 示例操作逻辑,可根据需求扩展
    switch ($command) {
        case '-t':
            echo "t {$param} was entered\n";
            break;
        case '-d':
            echo "d {$param} was entered\n";
            break;
        default:
            echo "未知命令:{$command}\n";
    }
}
?>

关键说明

  • 参数容错处理:启动时未传参数会提示用户补录,避免直接报错退出
  • 空输入判断:用trim()去掉换行符和首尾空格,确保仅按回车时能触发退出逻辑
  • 命令解析:用explode()拆分命令与参数,支持带参数的输入格式(如-t something)
  • 资源清理:退出前关闭STDIN流,保证系统资源正常释放

测试效果

执行php test.php -d后,控制台交互如下:

-d was entered
-t something
t something was entered

(按回车,程序退出)

如果启动时未传参数:

php test.php
请输入初始参数(如-d):-s
-s was entered
-d test
d test was entered

(按回车,程序退出)

内容的提问来源于stack exchange,提问作者BlissSol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 17:17:28