成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

php://output和php://stdout的區(qū)別

binaryTree / 2104人閱讀

摘要:同理可得到和的區(qū)別是進(jìn)程的標(biāo)準(zhǔn)輸出流,是返回的結(jié)果數(shù)據(jù)流。在瀏覽器端,進(jìn)程的輸出流被忽略,只有結(jié)果數(shù)據(jù)流被發(fā)送到服務(wù)器。同時(shí),和調(diào)用的信息都作為執(zhí)行結(jié)果發(fā)往結(jié)果輸出流,所以都正常顯示。

轉(zhuǎn)載請注明文章出處:https://tlanyan.me/php-output...

PHP包含了以php://開頭的一系列輸出輸出流,如php://stdin, php://stdout等。今天查看代碼時(shí),忽然想到一個(gè)問題:php://output和php://stdout有什么區(qū)別?

從PHP的官方文獻(xiàn)中找答案,對輸入流php://stdin和php://input的解釋分別如下(輸出流的解釋過于簡略):

php://stdin

php://stdin, php://stdout and php://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 php://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.

php://stdin is read-only, whereas php://stdout and php://stderr are write-only.

php://input

php://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 php://input instead of $HTTP_RAW_POST_DATA as it does not depend on special php.ini directives. Moreover, for those cases where $HTTP_RAW_POST_DATA is not populated by default, it is a potentially less memory intensive alternative to activating always_populate_raw_post_data. php://input is not available with enctype="multipart/form-data".

文檔并未直接闡述兩者的區(qū)別,仔細(xì)對比可得出以下信息:1. 均是只讀流; 2. php://stdin是PHP進(jìn)程的標(biāo)準(zhǔn)輸入,php://input用來讀取請求正文的原始數(shù)據(jù)。通過這些信息,該如何正確認(rèn)識(shí)兩者的本質(zhì)區(qū)別?

順著php://stdin進(jìn)程輸入的提示,聯(lián)想PHP進(jìn)程的執(zhí)行過程,再結(jié)合SAPI的差異,可以得到兩者主要區(qū)別:php://stdin是PHP進(jìn)程的輸入流,執(zhí)行生命周期內(nèi)均可能有數(shù)據(jù)流入(例如CLI下的交互式輸入);php://input是PHP執(zhí)行時(shí)的外部輸入流,一般數(shù)據(jù)只能讀一次(具體看SAPI的實(shí)現(xiàn))。同理可得到php://stdout和php://output的區(qū)別:php://stdout是PHP進(jìn)程的標(biāo)準(zhǔn)輸出流,php://output是返回的結(jié)果數(shù)據(jù)流。

下面用代碼驗(yàn)證結(jié)論:

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

echo "SAPI:" , PHP_SAPI , PHP_EOL;

命令行執(zhí)行文件,輸出如下:

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進(jìn)程的標(biāo)準(zhǔn)輸出流和結(jié)果輸出流均指向終端,所有消息都打印出來。在瀏覽器端,PHP進(jìn)程的輸出流被忽略,只有結(jié)果數(shù)據(jù)流被發(fā)送到web服務(wù)器。同時(shí),print和echo調(diào)用的信息都作為執(zhí)行結(jié)果發(fā)往結(jié)果輸出流,所以都正常顯示。

最后再感慨一下PHP內(nèi)置函數(shù)的簡潔實(shí)用,一個(gè)file_put_contents函數(shù)就搞定流寫入操作,換Java需要stream/writer一堆代碼,也省去C風(fēng)格的fopen/fwrite/fclose的繁瑣。

參考

http://php.net/manual/en/wrap...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28197.html

相關(guān)文章

  • PHP回顧之IO

    摘要:命令行時(shí)返回值為,標(biāo)準(zhǔn)輸入輸出均指向終端可用進(jìn)程號(hào)查看。會(huì)在腳本執(zhí)行完畢后關(guān)閉三個(gè)流,無需用戶手動(dòng)關(guān)閉。與遠(yuǎn)程網(wǎng)址交互是一個(gè)請求和響應(yīng)的過程,其中細(xì)節(jié)可參考本人之前的文章回顧之請求和回顧之響應(yīng),也可參考協(xié)議的權(quán)威文檔。 轉(zhuǎn)載請注明文章出處: https://tlanyan.me/php-review... PHP回顧系列目錄 PHP基礎(chǔ) web請求 cookie web響應(yīng) ses...

    happen 評論0 收藏0
  • PHP“流”(stream)簡介

    摘要:例引用了文件描述符允許讀寫臨時(shí)數(shù)據(jù)。注意丟失了第一個(gè)數(shù)據(jù)包輸出使用過濾器在使用,,之類的函數(shù)使,可以使用過濾器應(yīng)用在打開的上寫入時(shí)用函數(shù)處理所有的流數(shù)據(jù)也可以使用下面的方式設(shè)置上下文我們模擬了一個(gè)包查看的會(huì)顯示結(jié)果 以下內(nèi)容整理添加自: Understanding Streams in PHP 基礎(chǔ) 使用 :// 的格式來進(jìn)行stream的操作。 比如使用 file:// 協(xié)議...

    kid143 評論0 收藏0
  • PHP挑戰(zhàn)在線編程題

    摘要:今天想在中用來在線挑戰(zhàn)一些題目,要用到標(biāo)準(zhǔn)輸入輸出,但最近在寫又不想用來寫,平時(shí)寫項(xiàng)目都是表單提交,還真沒有考慮過這個(gè),于是看了下文檔。 今天想在Sphere Online Judge中用PHP來在線挑戰(zhàn)一些題目,要用到標(biāo)準(zhǔn)輸入輸出,但最近在寫php又不想用c來寫,平時(shí)寫項(xiàng)目都是表單提交,還真沒有考慮過這個(gè),于是看了下文檔。 文檔在此:http://php.net/manual/zh/...

    JackJiang 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<