首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP -检测STDIO输入

PHP -检测STDIO输入
EN

Stack Overflow用户
提问于 2015-02-17 21:08:16
回答 6查看 1.3K关注 0票数 8

我想要的是能够可选地将STDIO输送到PHP脚本。如果不是,它将从文件中获取输入。所以有时我会简单地运行脚本,其他时候我会做一些类似的事情

代码语言:javascript
复制
grep text logfile | php parseLog.php

我有一个非常类似的循环,当STDIO存在时,它可以很好地工作:

代码语言:javascript
复制
while (FALSE !== ($line = fgets(STDIN)))
{
        $customLogArr[]=$line;
}

当没有STDIO,虽然它停止等待一些,它甚至没有进入循环。

我想要做的是能够检测我是否有STDIO输入。有办法吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-02-17 21:35:36

代码语言:javascript
复制
if(FALSE !== ftell(STDIN))
{
    while (FALSE !== ($line = fgets(STDIN)))
    {
        $customLogArr[]=$line;
    }
}

对于STDIN,如果无法读取,ftell()将返回false。

票数 1
EN

Stack Overflow用户

发布于 2017-10-16 13:15:07

看起来有些事情变了,或者这些答案都没有正确的答案。您不能简单地通过ftell(STDIN)查看是否有从STDIN传递的数据。

代码语言:javascript
复制
<?php

$stdin = fopen('php://stdin', 'r');
var_dump(ftell($stdin));

输出

代码语言:javascript
复制
-:4:
bool(false)

这是来自php -v的输出

代码语言:javascript
复制
PHP 7.0.22-0ubuntu0.16.04.1 (cli) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.0.22-0ubuntu0.16.04.1, Copyright (c) 1999-2017, by Zend Technologies
    with Xdebug v2.4.0, Copyright (c) 2002-2016, by Derick Rethans

当我尝试使用STDIN常量时,我得到

代码语言:javascript
复制
PHP Notice:  Use of undefined constant STDIN - assumed 'STDIN' in - on line 3
票数 2
EN

Stack Overflow用户

发布于 2021-01-08 11:05:39

使用posix_isatty()函数可能要简单一些。

代码语言:javascript
复制
<?php

/**
 * parseLog.php
 */

echo (posix_isatty(STDIN)) ? 'no stdin' . PHP_EOL : file_get_contents('php://stdin');
代码语言:javascript
复制
$ echo 'foo' > ./logfile.txt

$ cat logfile.txt | php parseLog.php
foo

$ php parseLog.php
no stdin

posix_isatty(STDIN)确定STDIN是否打开并连接到终端。因此,在从STDIN接收数据时,它将返回false

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28571139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档