【问题标题】:Command-Line PHP: problems in mixing fread(STDIN,...) and fgets(STDIN)命令行 PHP:混合 fread(STDIN,...) 和 fgets(STDIN) 的问题
【发布时间】:2015-11-06 14:35:02
【问题描述】:

我正在开发一个命令行脚本,女巫使用 fread(用于是/否,...)和 fgets(用于手动验证值,...)。

问题是如果我输入的字符超过...(\n 也是一个字符),这些字符已经在下一个 fgets/fread 函数中输入了。

我尝试了 fflush(STDIN),但没有成功。我也试过 stream_get_line(STDIN,1024);这是某人在一个类似问题中推荐的,但是我必须输入几乎无穷无尽的字符,直到程序继续(我退出)。

如何让 PHP 在使用 fgets/fread 之前删除键盘缓冲区?

【问题讨论】:

  • 您能否向我们展示您的代码的相关示例?

标签: php stream command-line-interface stdin


【解决方案1】:

如果您的 PHP 是使用 Readline 模块编译的(这很常见),您可以只使用 readline()

http://php.net/manual/en/function.readline.php

$input = readline( 'Prompt: ' );

readline() 简化了从终端读取输入的过程。

【讨论】:

  • 我收到 PHP 致命错误:在线调用...中未定义的函数 readline() ... 我正在使用 PHP 5.5.9-1ubuntu4.9 (cli)(构建时间:4 月 17 日2015 11:44:57)
  • 我使用了 Mac OS X Mavericks 默认 PHP 5.4.40。您需要在 PHP 设置中有 Readline 模块(但这很常见)。请参阅此处的要求:php.net/manual/en/readline.setup.php(为了完整性,我编辑了我的答案)
猜你喜欢
  • 2016-04-17
  • 1970-01-01
  • 2019-08-04
  • 1970-01-01
  • 2014-05-03
  • 2017-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多