从STDIN读取的脚本

时间:2016-03-12 17:35:23

标签: php stdin

我有一个读取文本文件的php脚本。我使用fgetc()逐个获取每个角色。我打开文件以使用fopen()进行读取,然后使用从fopen()返回的文件描述符作为fgetc()的第一个参数。我试着从STDIN阅读来做同样的事情。我想在终端中运行脚本,给它整个文本(之前在文本文件中),然后按回车键。我认为脚本会读取它并将像从文本文件中读取一样运行,但它不起作用。它仅适用于单独输入每个字符并在其后输入的情况。这是为什么?是否有可能使脚本按我想要的方式运行?我可以立刻把它全文发给终端吗?我应该使用不同的功能吗?

$inputFile = fopen($path, "w");
while(($char = fgetc($inputFile)) !== false){
    dosomething();
}

我要做的是用$inputFile替换fgetc()中的STDIN

1 个答案:

答案 0 :(得分:1)

请参阅http://php.net/manual/en/features.commandline.io-streams.php,第二条评论

  

注意,如果没有stream_set_blocking()调用,fgetcsv()会在STDIN上挂起,等待用户输入,这对我们正在寻找管道文件没有用。如果它不在这里,那就不会了。

<?php
stream_set_blocking(STDIN, 0);
$csv_ar = fgetcsv(STDIN);

我认为fgetc也是如此。毕竟它

  

string fgetc(resource $ handle)从给定的文件指针中获取字符

强调我的。 见http://php.net/manual/en/function.fgetc.php     ...