質問
知っていPHPがあるわけですからこれらの使用の発生はあ は 標準的な入力ですが、PHPの主張として使用できる汎用のスクリプティング言語の場合なのでファンキーなwebコンベンションに出かけていく。知っているPHP品 stdout
(あい)と print
や echo
, は、単純であるが、私はどんな風にPHPスクリプトが入力からの stdin
(具体的に fgetc()
, すが、その入力機能)、またはこでも可能ですか?
解決
(1文字を、stdin
をすでに述べたように、または)php://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));
あなたが使用することができます fopen()
のphp://stdin
でます:
$f = fopen('php://stdin', 'r');
一発でそれをすべてグラブます:
$contents = file_get_contents("php://stdin");
echo $contents;
IIRC、あなたはまた、次のように使用することができます:
$in = fopen(STDIN, "r");
$out = fopen(STDOUT, "w");
技術的には同じですが、少しクリーナー構文ワイズます。
これも動作します:
$data = stream_get_contents(STDIN);
使用時fgetsでブロックbashのスクリプトの場合、 stdin
なセットまたは空のを含むのものを使いながら @
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, 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 "!"