php命令行应用程序仅回显或printf等一些字符串与获取sdtout流并写入它有什么区别,即
$stdout = fopen('php://stdout', 'w');
我首先想到的是输出缓冲。echo
并print
与输出缓冲机制接口,但直接写入标准输出会绕过它。
考虑这个脚本:
<?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