這是因爲標準輸入流不會關閉,第三個參數爲stream_copy_to_stram
,默認設置爲讀取無限數量的字節。
<?php
$reader = fopen("php://stdin", "r");
$writer = fopen("test.out", "w");
stream_copy_to_stream($reader, $writer);
fclose($reader);
fclose($writer);
嘗試從命令行運行此命令。
// at this point it will block forever waiting on stdin
$ php reader_writer.php
Type something
^C
字符串「Type Something」將寫入文件。在PHP 5.6 php://input is reusable
或者當
$reader = fopen("php://input", "r");
$writer = fopen("test.out", "w");
while ($line = fgets($reader)) {
fwrite($writer, $line, strlen($line));
}
fclose($reader);
fclose($writer);
作爲一個有趣的方面說明在命令行上:
爲了解決這個問題,你可以重寫。
$reader = fopen("php://stdin", "r");
$writer = fopen("test.out", "w");
while ($line = fgets($reader)) {
fwrite($writer, $line, strlen($line));
}
fclose($reader);
fclose($writer);
然後運行
$ echo "sdfsdaf" | php read_write.php
你說得對!它在文檔中說'php:// input',而不是'php:// stdin',因爲我用... – 2014-11-08 14:54:49