php://output和php://stdout使用区别详解

阅读量:24
2021-04-18

这次给大家带来/output和/stdout使用区别详解,/output和/stdout使用的注意事项有哪些,下面就是实战案例,一起来看一下。

从PHP的官方文献中找答案,对输入流/stdin和/input的解释分别如下(输出流的解释过于简略):

/stdin
/stdin, /stdout and /stderr allow direct access to the corresponding input or output stream of the PHP process. The stream references a duplicate file descriptor, so if you open /stdin and later close it, you close only your copy of the descriptor-the actual stream referenced by STDIN is unaffected. Note that PHP exhibited buggy behavior in this regard until PHP 5.2.1. It is recommended that you simply use the constants STDIN, STDOUT and STDERR instead of manually opening streams using these wrappers.
/stdin is read-only, whereas /stdout and /stderr are write-only.
/input
/input is a read-only stream that allows you to read raw data from the request body. In the case of POST requests, it is preferable to use /input instead of $ as it does not depend on special php.ini directives. Moreover, for those cases where $ is not populated by default, it is a potentially less memory intensive alternative to activating always_populate_raw_post_data. /input is not available with enctype=”/form-data”.

文档并未直接阐述两者的区别,仔细对比可得出以下信息:1. 均是只读流; 2. /stdin是PHP进程的标准输入,/input用来读取请求正文的原始数据。通过这些信息,该如何正确认识两者的本质区别?

顺着/stdin进程输入的提示,联想PHP进程的执行过程,再结合SAPI的差异,可以得到两者主要区别:/stdin是PHP进程的输入流,执行生命周期内均可能有数据流入(例如CLI下的交互式输入);/input是PHP执行时的外部输入流,一般数据只能读一次(具体看SAPI的实现)。同理可得到/stdout和/output的区别:/stdout是PHP进程的标准输出流,/output是返回的结果数据流。

下面用代码验证结论:

// file: test.php
file_put_contents("/output", "message sent by output" . PHP_EOL);
file_put_contents("/stdout", "message sent by stdout" . PHP_EOL);
print("message sent by print" . PHP_EOL);
echo "SAPI:" , PHP_SAPI , PHP_EOL;

命令行执行文件,输出如下:

message sent by output
message sent by stdout
message sent by print
SAPI:cli

浏览器端请求,输出如下:

message sent by output
message sent by print
SAPI:fpm-fcgi

在命令行下,PHP进程的标准输出流和结果输出流均指向终端,所有消息都打印出来。在浏览器端,PHP进程的输出流被忽略,只有结果数据流被发送到web服务器。同时,print和echo调用的信息都作为执行结果发往结果输出流,所以都正常显示。

相信看了本文案例你已经掌握了方法,更多精彩请关注星网无限其它相关文章!

推荐阅读:

PHP计算特大数字的整数集

PHP+ajax实现获取新闻数据案例详解

以上就是/output和/stdout使用区别详解的详细内容,更多请关注星网无限其它相关文章!

声明:本文原创发布星网无限,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@处理

THE END

发表评论

相关推荐

  • 有关fgets()函数的文章推荐10篇

    以下正文:这篇文章主要介绍了PHP文件读写操作相关函数总结,本文总结了fwrite()、fread()、fgets()、fgetc()、file()、readf ...

    阅读量:67
    2021-04-19
  • php递归与无限分类实例详解

    这篇文章主要介绍了php实现递归与无限分类的方法,涉及php的递归操作技巧,需要的朋友可以参考下本文实例讲述了php实现递归与 ...

    阅读量:46
    2021-04-19
  • CI框架中zip类的使用

    CI框架自带的zip类简单实用,本文就来简单说一下ci框架的zip类的使用,需要的朋友可以参考下CI框架自带的zip类简单实用,本文 ...

    阅读量:45
    2021-04-18
  • SWFUpload插件上传文件的代码

    这篇文章主要介绍了文件上传之SWFUpload插件(代码),实现此代码主要分为两部分:1.前台文件和 2.后台文件upload.php,需要 ...

    阅读量:43
    2021-04-18
  • 关于destoon的URL Rewrite设置方法

    这篇文章主要介绍了destoon的URL Rewrite(伪静态)设置方法,需要的朋友可以参考下1、如果您的服务器支持.htaccess,则无需设 ...

    阅读量:48
    2021-04-18