日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

php://input和php://output

發(fā)布時(shí)間:2023/12/20 php 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php://input和php://output 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

php://input 簡(jiǎn)介

php://input 是個(gè)可以訪問請(qǐng)求的原始數(shù)據(jù)的只讀流。 POST 請(qǐng)求的情況下,最好使用 php://input 來代替 $HTTP_RAW_POST_DATA(原生的post數(shù)據(jù)),因?yàn)樗灰蕾囉谔囟ǖ?php.ini 指令,內(nèi)存消耗更少。

官方解釋:

php://input可以讀取沒有處理過的POST數(shù)據(jù)。相較于$HTTP_RAW_POST_DATA而言,它給內(nèi)存帶來的壓力較小,并且不需要特殊的php.ini設(shè)置。php://input不能用于enctype=multipart/form-data

$http_raw_post_data 是什么?

$http_raw_post_data是PHP內(nèi)置的一個(gè)全局變量。它用于,PHP在無法識(shí)別的Content-Type的情況下,將POST過來的數(shù)據(jù)原樣地填入變量$http_raw_post_data。它同樣無法讀取Content-Type為multipart/form-data的POST數(shù)據(jù)。需要設(shè)置php.ini中的always_populate_raw_post_data值為On,PHP才會(huì)總把POST數(shù)據(jù)填入變量$http_raw_post_data。

PHP在無法識(shí)別的Content-Type的情況下,才將POST過來的數(shù)據(jù)原樣地填入變量$http_raw_post_data。

使用方法

$data = file_get_contents("php://input");

get&post提交表單

  • GET提交

請(qǐng)求頭中不會(huì)指定Content-Type和Content-Length,它表示http請(qǐng)求body中的數(shù)據(jù)是使用http的post方法提交的表單數(shù)據(jù),并且進(jìn)行了urlencode()處理。

  • POST提交

Content-Type為application/x-www-form-urlencoded或者為multipart/form-data的時(shí)候,PHP才會(huì)將http請(qǐng)求數(shù)據(jù)包中的body相應(yīng)部分?jǐn)?shù)據(jù)填入$_POST全局變量中(時(shí)用$_POST可以接收數(shù)據(jù)),其它情況PHP都忽略。

php://input除了在數(shù)據(jù)類型為multipart/form-data之外為空外,其它情況都可能不為空。

php://input無法讀取 enctype=multipart/form-data數(shù)據(jù),當(dāng)php://input遇到它時(shí),永遠(yuǎn)為空,即便http entity body有數(shù)據(jù)。

為什么叫部分填入呢? 為multipart/form-data的時(shí)候,表單的數(shù)據(jù)不會(huì)填入到到 $_POST中,而是填入到了 $_FILES中。

php://input 與 $HTTP_RAW_POST_DATA 比較:

php://input 與$HTTP_RAW_POST_DATA讀取的數(shù)據(jù)是一樣的,都只讀取Content-Type不為multipart/form-data的數(shù)據(jù)。

讀取的數(shù)據(jù)是一樣的,但是填入數(shù)據(jù)的條件不一樣,post提交時(shí),php://input就會(huì)填入,而$HTTP_RAW_POST_DATA只有再不能識(shí)別Content-Type時(shí)填入。

總結(jié):

  • Coentent-Type僅在取值為application/x-www-data-urlencoded和multipart/form-data兩種情況下,PHP才會(huì)將http請(qǐng)求數(shù)據(jù)包中相應(yīng)的數(shù)據(jù)填入全局變量$_POST。

當(dāng)Coentent-Type為application/x-www-data-urlencoded時(shí)?填入到$_POST數(shù)組中的數(shù)據(jù)是進(jìn)行urldecode()解析的結(jié)果

只有Content-Type為application/x-www-data-urlencoded時(shí),php://input數(shù)據(jù)才跟$_POST數(shù)據(jù)相"一致"(打上引號(hào),表示它們格式不一致,內(nèi)容一致)

  • PHP不能識(shí)別的Content-Type類型的時(shí)候,會(huì)將http請(qǐng)求包中相應(yīng)的數(shù)據(jù)填入變量$HTTP_RAW_POST_DATA

  • 只有Coentent-Type不為multipart/form-data的時(shí)候,PHP不會(huì)將http請(qǐng)求數(shù)據(jù)包中的相應(yīng)數(shù)據(jù)填入php://input,否則其它情況都會(huì)。填入的長(zhǎng)度,由Coentent-Length指定。

php://input不能用于讀取enctype=multipart/form-data數(shù)據(jù)。

  • php://input數(shù)據(jù)總是跟$HTTP_RAW_POST_DATA相同,但是php://input比$HTTP_RAW_POST_DATA更湊效,且不需要特殊設(shè)置php.ini?

  • php://input讀取不到$_GET數(shù)據(jù)。是因?yàn)?_GET數(shù)據(jù)作為query_path寫在http請(qǐng)求頭部(header)的PATH字段,而不是寫在http請(qǐng)求的body部分。

GET請(qǐng)求將,PHP會(huì)將PATH字段的query_path部分,填入全局變量$_GET。通常情況下,GET方法提交的http請(qǐng)求,body為空。

php://output輸出流用法:

簡(jiǎn)介

php://output是php語言中一個(gè)只寫的數(shù)據(jù)流,允許像 print() 和 echo() 一樣的方式寫入到輸出緩沖區(qū);“php://output”支持CLI(command-line interface,命令行界面)模式和Http模式;

用法:

  • CLI模式通過php://output向終端輸出內(nèi)容:
  • test.php文件:

    <?php $output = fopen("php://output", "w"); fwrite($output, "愛E族"); fclose($output);

    輸出:

    [root@aiezu.com ~]# php test.php 愛E族
  • Http模式通過php://output導(dǎo)出csv文件:
  • 注意,以UTF8編碼導(dǎo)出CSV文件,如果文件頭未添加BOM頭,使用Excel打開會(huì)出現(xiàn)亂碼。

    test.php頁(yè)面代碼:

    <?php header('Content-Type: application/csv'); header('Content-Disposition: attachment; filename="test.csv"'); $output = fopen('php://output','w') or die("Can't open php://output"); //UTF8 csv文件頭前需添加BOM,不然會(huì)是亂碼 fwrite($output, chr(0xEF).chr(0xBB).chr(0xBF)); // 輸出標(biāo)題行 fputcsv($output, array('站點(diǎn)名', '域名', '行業(yè)')); //數(shù)據(jù)內(nèi)容 $rows = array(array('天貓', 'http://tmall.com', '電子商務(wù)'),array('愛E族', 'http://aiezu.com', '互聯(lián)網(wǎng)技術(shù)'),array('騰訊', 'http://qq.com', '社交網(wǎng)絡(luò)') ); foreach($rows as $row) {fputcsv($output, $row); } fclose($output) or die("Can't close php://output");

    常見的應(yīng)用:讀取數(shù)據(jù)輸出到瀏覽器(PHPExcel里的運(yùn)用)

    轉(zhuǎn)載于:https://my.oschina.net/u/3683692/blog/3032795

    總結(jié)

    以上是生活随笔為你收集整理的php://input和php://output的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。