最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2018年05月06日 11:41:24   投稿:laozhang  
本篇文章給大家詳細(xì)分析了php://output和php://stdout的用法區(qū)別以及實(shí)例代碼分享,有需要的朋友可以參考學(xué)習(xí)下。

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)識兩者的本質(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的繁瑣。

相關(guān)文章

  • 11個(gè)PHP 分頁腳本推薦

    11個(gè)PHP 分頁腳本推薦

    Web開發(fā)中,分頁設(shè)計(jì)必不可少。本文列舉了10個(gè)PHP分頁腳本,希望對你的web開發(fā)會有幫助。 列表中大部分,提供演示和代碼下載。
    2011-08-08
  • 讓PHP開發(fā)者事半功倍的十大技巧小結(jié)

    讓PHP開發(fā)者事半功倍的十大技巧小結(jié)

    在PHP中,單純按照自己思路去解決問題往往會是一種錯誤的辦法。這并不是因?yàn)槟闶且粋€(gè)糟糕的程序員,而是因?yàn)槿绻阆雽懗龊玫目删S護(hù)性強(qiáng)的代碼,有些標(biāo)準(zhǔn)技巧是你必須要使用的。
    2010-04-04
  • PHP實(shí)現(xiàn)的多文件上傳類及用法示例

    PHP實(shí)現(xiàn)的多文件上傳類及用法示例

    這篇文章主要介紹了PHP實(shí)現(xiàn)的多文件上傳類及用法,詳細(xì)分析了php實(shí)現(xiàn)的多文件上傳類與具體的使用技巧,需要的朋友可以參考下
    2016-05-05
  • PHP實(shí)現(xiàn)生成Excel文件并導(dǎo)出的示例詳解

    PHP實(shí)現(xiàn)生成Excel文件并導(dǎo)出的示例詳解

    這篇文章主要為大家詳細(xì)介紹了PHP實(shí)現(xiàn)生成Excel文件并導(dǎo)出的方法,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)PHP有一定的幫助,需要的可以參考一下
    2023-01-01
  • PHP中ADODB類詳解

    PHP中ADODB類詳解

    1. 前言 ADODB 是 Active Data Objects Data Base 的簡稱,它是一種 PHP 存取數(shù)據(jù)庫的函式組件?,F(xiàn)在 SFS3 系統(tǒng) (校園自由軟件交流網(wǎng)學(xué)務(wù)系統(tǒng)) 計(jì)劃的主持人陳瑩光老師,決定采用此一組件,為了讓更多有心參與該項(xiàng)目的伙伴們能夠順利加入發(fā)展的行列,小弟認(rèn)為有必要把 ADODB 的中文入門介紹寫出來,以方便伙伴們參考備查。
    2008-03-03
  • php5 pdo新改動加載注意事項(xiàng)

    php5 pdo新改動加載注意事項(xiàng)

    想試試pdo怎么用,把 extension=php_pdo_mssql.dll extension=php_pdo_mysql.dll
    2008-09-09
  • PHP實(shí)現(xiàn)的Redis操作通用類示例

    PHP實(shí)現(xiàn)的Redis操作通用類示例

    這篇文章主要介紹了PHP實(shí)現(xiàn)的Redis操作通用類,結(jié)合實(shí)例形式分析了php實(shí)現(xiàn)的redis連接、隊(duì)列、集合、hash表、事務(wù)等相關(guān)操作封裝技巧,需要的朋友可以參考下
    2018-06-06
  • php將html轉(zhuǎn)成wml的WAP標(biāo)記語言實(shí)例

    php將html轉(zhuǎn)成wml的WAP標(biāo)記語言實(shí)例

    這篇文章主要介紹了php將html轉(zhuǎn)成wml的WAP標(biāo)記語言的方法,實(shí)例分析了php實(shí)現(xiàn)標(biāo)簽的轉(zhuǎn)換與過濾的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-07-07
  • PHP 時(shí)間轉(zhuǎn)換Unix時(shí)間戳代碼

    PHP 時(shí)間轉(zhuǎn)換Unix時(shí)間戳代碼

    PHP 時(shí)間轉(zhuǎn)換Unix 時(shí)間戳實(shí)現(xiàn)代碼。
    2010-01-01
  • Referer原理與圖片防盜鏈實(shí)現(xiàn)方法詳解

    Referer原理與圖片防盜鏈實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了Referer原理與圖片防盜鏈實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了Referer頭信息原理與圖片防盜鏈判定、實(shí)現(xiàn)方法,并附帶一個(gè)Http請求封裝類,需要的朋友可以參考下
    2019-07-07

最新評論

铜鼓县| 平舆县| 漯河市| 阿合奇县| 钟祥市| 海晏县| 天气| 鄂托克前旗| 漳州市| 达州市| 天全县| 邓州市| 焦作市| 章丘市| 定远县| 乌拉特前旗| 乌拉特中旗| 垣曲县| 朝阳市| 苗栗市| 大埔区| 巴马| 高陵县| 宝坻区| 长子县| 平陆县| 腾冲县| 雅安市| 东辽县| 兰州市| 平武县| 东平县| 阜平县| 沈丘县| 阳泉市| 阳山县| 辽源市| 普安县| 沙河市| 宁国市| 英吉沙县|