私はPHPが通常Web開発に使用されていることを知っていますis標準入力はありませんが、PHPは汎用スクリプト言語として使用可能であると主張しています。従えば、ファンキーなウェブベースの慣習です。 PHPは、stdout
とprint
を使用してecho
(または呼び出したいもの)に出力することを知っています。 m PHPスクリプトがstdin
から入力を取得する方法(具体的にはfgetc()
を使用しますが、入力関数は適切です)、またはこれも可能ですか?
php://stdin
へのファイルハンドルを作成してstdin
を読み取ってから、たとえばfgets()
で行を読み取ることができます(または、既に述べたように、fgetc()
単一の文字の場合):
<?php
$f = fopen( 'php://stdin', 'r' );
while( $line = fgets( $f ) ) {
echo $line;
}
fclose( $f );
?>
[〜#〜] stdin [〜#〜]からの読み取りは 推奨方法
<?php
while (FALSE !== ($line = fgets(STDIN))) {
echo $line;
}
?>
ファイルハンドルをいじる必要がないようにするには、file_get_contents()
とphp://stdin
:
$ echo 'Hello, World!' | php -r 'echo file_get_contents("php://stdin");'
Hello, World!
(stdin
から本当に大量のデータを読み取る場合は、ファイルハンドルアプローチを使用することもできますが、これは何メガバイトにも適しているはずです。)
簡単な方法は
$var = trim(fgets(STDIN));
_php://stdin
_で fopen()
を使用できます。
_$f = fopen('php://stdin', 'r');
_
一発ですべてをつかむ:
$contents = file_get_contents("php://stdin");
echo $contents;
IIRCでは、次のものも使用できます。
$in = fopen(STDIN, "r");
$out = fopen(STDOUT, "w");
技術的には同じですが、構文的には少し簡潔です。
Fgetsを使用する場合、@
phpエラー制御演算子 の使用中を含め、stdin
が設定されていないか空の場合、bashスクリプトでブロックすることがあります。
#!/usr/bin/php
<?php
$pipe = @trim(fgets(STDIN));
// Script was called with an empty stdin
// Fail to continue, php warning
この動作は、PHPヘッダーにstream_set_blocking
を設定することで回避できます。
#!/usr/bin/php
<?php
stream_set_blocking(STDIN, 0);
$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 "!"
これも機能します:
$data = stream_get_contents(STDIN);