PHP得到输出流或只是回声

时间:2012-08-25 19:17:33

标签: php

php命令行应用程序中只有echo或printf等一些字符串的区别,而不是获取stdout流并写入它,即

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

4 个答案:

答案 0 :(得分:7)

首先想到的是输出缓冲。 echoprint与输出缓冲机制接口,但直接写入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不是。

答案 1 :(得分:2)

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

有关流的更多信息,请参阅手册:http://www.php.net/manual/en/wrappers.php.php

答案 2 :(得分:0)

除了已经注意到的技术差异之外,在风格和惯例方面也存在明显的差异。 echo / print是在PHP中生成输出的常规方法;写入输出就像对文件一样会出现异常并可能造成混淆。为了清楚你的意图,我不建议这样做,除非你有充分的理由这样做。

答案 3 :(得分:0)

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