我知道 PHP通常用于没有标准输入的 Web 开发,但 PHP 声称可以用作通用脚本语言,如果您确实遵循它的时髦的基于 Web 的约定。我知道 PHP 用 and 打印到(stdout
或任何你想调用的东西),这很简单,但我想知道 PHP 脚本如何从(特别是 with ,但任何输入函数都很好)获取输入,或者是这甚至可能吗?print
echo
stdin
fgetc()
Chris Lutz
问问题
80153 次
10 回答
88
例如,可以stdin
通过创建一个文件句柄来php://stdin
读取它,然后从中读取fgets()
一行(或者,如您已经说过的,fgetc()
对于单个字符):
<?php
$f = fopen( 'php://stdin', 'r' );
while( $line = fgets( $f ) ) {
echo $line;
}
fclose( $f );
?>
于 2009-02-16T22:08:39.507 回答
47
推荐从STDIN读取
<?php
while (FALSE !== ($line = fgets(STDIN))) {
echo $line;
}
?>
于 2010-12-17T23:22:17.477 回答
24
为了避免弄乱文件句柄,请使用file_get_contents()
and php://stdin
:
$ echo 'Hello, World!' | php -r 'echo file_get_contents("php://stdin");'
Hello, World!
(如果您正在从您那里读取真正大量的数据,stdin
您可能想要使用文件句柄方法,但这对于许多兆字节来说应该是好的。)
于 2012-02-27T12:09:19.813 回答
15
一个简单的方法是
$var = trim(fgets(STDIN));
于 2012-03-26T08:33:55.397 回答
9
一口气抓住一切:
$contents = file_get_contents("php://stdin");
echo $contents;
于 2014-03-10T21:26:49.310 回答
8
您可以fopen()
使用php://stdin
:
$f = fopen('php://stdin', 'r');
于 2009-02-16T22:08:07.713 回答
6
这也有效:
$data = stream_get_contents(STDIN);
于 2015-08-14T12:55:22.823 回答
5
IIRC,您还可以使用以下内容:
$in = fopen(STDIN, "r");
$out = fopen(STDOUT, "w");
技术上相同,但语法更简洁。
于 2009-02-16T23:09:29.983 回答
3
使用 fgets 时,如果stdin
未设置或为空,它可能会阻塞在 bash 脚本中,包括在使用@
php 错误控制运算符时。
#!/usr/bin/php
<?php
$pipe = @trim(fgets(STDIN));
// Script was called with an empty stdin
// Fail to continue, php warning
stream_set_blocking
通过设置php 标头可以避免这种行为:
#!/usr/bin/php
<?php
stream_set_blocking(STDIN, false);
$pipe = @trim(fgets(STDIN));
// Script was called with an empty stdin
// No errors or warnings, continue
echo $pipe . "!";
例如,调用如下:
echo "Hello world" | ./myPHPscript
// Output "Hello world!"
./myPHPscript
// Output "!"
于 2018-03-05T11:50:21.680 回答
1
如果您只想阅读单行而没有太多麻烦,请使用内置的 readline() 函数,而不是手动打开 STDIN 流:
<?php
$age= readline("Enter your age: ");
echo "Your age is : ".$age;
PHP 文档是你的朋友: https ://www.php.net/manual/en/function.readline.php
于 2019-11-06T03:08:18.590 回答