91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php://output與php://stdout有什么不同

發布時間:2021-02-18 15:03:38 來源:億速云 閱讀:181 作者:Leah 欄目:開發技術

php://output與php://stdout有什么不同?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

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

從PHP的官方文獻中找答案,對輸入流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”.

文檔并未直接闡述兩者的區別,仔細對比可得出以下信息:1. 均是只讀流; 2. php://stdin是PHP進程的標準輸入,php://input用來讀取請求正文的原始數據。通過這些信息,該如何正確認識兩者的本質區別?

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

下面用代碼驗證結論:

// 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;

命令行執行文件,輸出如下:

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內置函數的簡潔實用,一個file_put_contents函數就搞定流寫入操作,換Java需要stream/writer一堆代碼,也省去C風格的fopen/fwrite/fclose的繁瑣。

看完上述內容,你們掌握php://output與php://stdout有什么不同的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安福县| 耿马| 孟连| 宁阳县| 南充市| 定边县| 梧州市| 卓尼县| 全州县| 全南县| 二连浩特市| 西安市| 杭锦旗| 金溪县| 商洛市| 成安县| 邵武市| 西华县| 志丹县| 滦南县| 嘉荫县| 龙泉市| 余干县| 海南省| 增城市| 绵阳市| 宜昌市| 玉山县| 集安市| 平乡县| 手机| 比如县| 玛沁县| 毕节市| 文成县| 伊金霍洛旗| 苏尼特右旗| 白银市| 勐海县| 西丰县| 叶城县|