php命令行应用程序中只回显或打印一些字符串与获取sdtout流并写入它(即)有什么不同
$stdout = fopen('php://stdout', 'w');
我首先想到的是输出缓冲。echo
和print
与输出缓冲机制接口,但直接写入stdout会绕过它
考虑这个脚本:
<?php
$stdout = fopen('php://stdout', 'w');
ob_start();
echo "echo output'n";
fwrite($stdout, "FWRITTEN'n");
echo "Also echo'n";
$out = ob_get_clean();
echo $out;
输出:
FWRITTEN
echo output
Also echo
这表明echo
被缓冲而fwrite没有被缓冲。
不同之处在于echo
写入作为输出缓冲流的php://output
。但是,php://stdout
允许您直接访问未缓冲的进程输出流。
有关流的更多信息,请参阅手册:http://www.php.net/manual/en/wrappers.php.php
除了已经注意到的技术差异之外,还有明显的风格和惯例差异。echo
/print
是PHP中产生输出的正常方式;像写入文件一样写入输出是不正常的,并且可能会造成混淆。为了清楚你的意图,我不建议你这样做,除非你有充分的理由这样做。
这里php://stdout
不是缓冲流,fwrite可以使用php://output
缓冲输出