6

php命令行应用程序仅回显或printf等一些字符串与获取sdtout流并写入它有什么区别,即

$stdout = fopen('php://stdout', 'w');
4

4 回答 4

9

我首先想到的是输出缓冲。echoprint与输出缓冲机制接口,但直接写入标准输出会绕过它。

考虑这个脚本:

<?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 不是。

于 2012-08-25T19:34:14.703 回答
2

不同之处在于echo写入php://output哪个是输出缓冲区流。但是,php://stdout您可以直接访问进程的无缓冲输出流。

有关流的更多信息可以在手册中找到:http ://www.php.net/manual/en/wrappers.php.php

于 2012-08-25T19:37:48.677 回答
0

除了已经注意到的技术差异外,风格和惯例上也有明显的差异。 echo/print是 PHP 中产生输出的正常方式;像写入文件一样写入输出将是异常的并且可能会造成混淆。为了清楚您的意图,我不建议您这样做,除非您有充分的理由这样做。

于 2012-08-25T19:49:17.497 回答
0

这里php://stdout不是缓冲流, fwrite 可以使用缓冲输出php://output

于 2013-11-18T10:35:07.967 回答