<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                php:// — 訪問各個輸入/輸出流(I/O streams) ### 封裝協議摘要(針對?*php://filter*,參考被篩選的封裝器) | 屬性 | 支持 | | --- | --- | | 受限于?[allow\_url\_fopen](http://php.net/manual/zh/filesystem.configuration.php#ini.allow-url-fopen) | No | | 受限于?[allow\_url\_include](http://php.net/manual/zh/filesystem.configuration.php#ini.allow-url-include) | 僅?*php://input*、?*php://stdin*、?*php://memory*?和?*php://temp*。 | | 允許讀取 | 僅?*php://stdin*、?*php://input*、?*php://fd*、?*php://memory*?和?*php://temp*。 | | 允許寫入 | 僅?*php://stdout*、?*php://stderr*、?*php://output*、?*php://fd*、?*php://memory*?和*php://temp*。 | | 允許追加 | 僅?*php://stdout*、?*php://stderr*、?*php://output*、?*php://fd*、?*php://memory*?和*php://temp*(等于寫入) | | 允許同時讀寫 | 僅?*php://fd*、?*php://memory*?和?*php://temp*。 | | 支持?[stat()](http://php.net/manual/zh/function.stat.php) | 僅?*php://memory*?和?*php://temp*。 | | 支持?[unlink()](http://php.net/manual/zh/function.unlink.php) | No | | 支持?[rename()](http://php.net/manual/zh/function.rename.php) | No | | 支持?[mkdir()](http://php.net/manual/zh/function.mkdir.php) | No | | 支持?[rmdir()](http://php.net/manual/zh/function.rmdir.php) | No | | 僅僅支持?[stream\_select()](http://php.net/manual/zh/function.stream-select.php) | *php://stdin*、?*php://stdout*、?*php://stderr*、?*php://fd*?和?*php://temp*。 | 不需要開啟allow\_url\_fopen, 僅php://input、 php://stdin、 php://memory 和 php://temp 需要開啟allow\_url\_include。 **php://stdin, php://stdout 和 php://stderr** php://stdin、php://stdout 和 php://stderr 允許直接訪問 PHP 進程相應的輸入或者輸出流。 php://stdin 是只讀的, php://stdout 和 php://stderr 是只寫的 **php://stdin** ``` <?php while($line = fopen('php://stdin','r')) {//open our file pointer to read from stdin echo $line."\n"; echo fgets($line);//讀取 } ?> ``` ![](https://img.kancloud.cn/76/81/7681b1ddda6c6d28f8a0050af634432b_342x155.png) **php://stdout** ``` <?php $fd = fopen('php://stdout', 'w'); if ($fd) { echo $fd."\n"; fwrite($fd, "test"); fwrite($fd, "\n"); fclose($fd); } ?> ``` ![](https://img.kancloud.cn/40/cd/40cdc93c5870b3c98eab20e4e30814bb_344x84.png) **php://stderr** ``` <?php $stderr = fopen( 'php://stderr', 'w' ); echo $stderr."\n"; fwrite($stderr, "uknow" ); fclose($stderr); ?> ``` ![](https://img.kancloud.cn/50/d9/50d90cb6f5fe2275bf1c6748ae85caef_282x71.png) $HTTP_RAW_POST_DATA post原始數據,php5.6棄用,php7.0移除,不建議使用,請使用php://input代替 **php://input**是個可以訪問請求的原始數據的只讀流 ``` //將表單提交到服務端 <form action="" method="POST"> name: <input type="text" name="name" value="tom" /><br /> age:<input type="text" name="age" value="22" /><br /> <input type="submit" value="Submit" /> </form> //服務端使用file_get_contents獲取php://input內容 $content = file_get_contents("php://input"); echo $content; //輸出name=tom&age=22 parse_str($content), $_OUTPUT);//Array ( [name] => tom [age] => 22 ) ``` ``` <form action="" method="POST"> name: <input type="text" name="name" value="tom" /><br /> age:<input type="text" name="age" value="22" /><br /> <input type="submit" value="Submit" /> </form> <?php // 解析“PUT”請求的示例 parse_str(file_get_contents('php://input'), $_OUTPUT); // 結果 print_r($_OUTPUT);//Array ( [name] => tom [age] => 22 ) ``` [output與input例子](http://aiezu.com/article/php_input_output_streams.html) **php://output** 是一個只寫的數據流, 允許你以 print 和 echo 一樣的方式 寫入到輸出緩沖區 **CLI模式通過php://output向終端輸出內容** ~~~ $output = fopen("php://output", "w"); fwrite($output, "愛E族"); fclose($output); //cli執行 php test.php //愛E族 ~~~ **Http模式通過php://output導出csv文件** 注意,以UTF8編碼導出CSV文件,如果文件頭未添加BOM頭,使用Excel打開會出現亂碼 ~~~ 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,不然會是亂碼 fwrite($output, chr(0xEF).chr(0xBB).chr(0xBF)); // 輸出標題行 fputcsv($output, array('站點名', '域名', '行業')); //數據內容 $rows = array( array('天貓', 'http://tmall.com', '電子商務') ,array('愛E族', 'http://aiezu.com', '互聯網技術') ,array('騰訊', 'http://qq.com', '社交網絡') ); foreach($rows as $row) { fputcsv($output, $row); } fclose($output) or die("Can't close php://output"); ~~~ **php://fd** 允許直接訪問指定的文件描述符。 例如 php://fd/3 引用了文件描述符 3 **php://memory** 和 **php://temp** 是一個類似文件 包裝器的數據流,允許讀寫臨時數據。 兩者的唯一區別是 php://memory 總是把數據儲存在內存中, 而 php://temp 會在內存量達到預定義的限制后(默認是 2MB)存入臨時文件中。 臨時文件位置的決定和 sys_get_temp_dir() 的方式一致 php://temp 的內存限制可通過添加 /maxmemory:NN 來控制,NN 是以字節為單位、保留在內存的最大數據量,超過則使用臨時文件 ~~~ $fiveMBs = 5 * 1024 * 1024; $fp = fopen("php://temp/maxmemory:$fiveMBs", 'r+'); fputs($fp, "hello\n"); // 讀取寫入的數據. rewind($fp); echo stream_get_contents($fp); ~~~ php://memory 和 php://temp 是一次性的,比如:stream 流關閉后,就無法再次得到以前的內容了 ~~~ file_put_contents('php://memory', 'PHP'); echo file_get_contents('php://memory'); // 啥也沒有 ~~~ ``` //打開文件或者url $handle = fopen("php://temp", "r+"); $handle2 = fopen("php://temp", "r+"); //寫入文件 fwrite($handle, "line1\n"); fwrite($handle2, "line4\n"); fwrite($handle, "line2\n"); fwrite($handle2, "line5\n"); fwrite($handle, "line3\n"); fwrite($handle2, "line6\n"); //獲取內存消耗 var_dump(memory_get_usage());//387472 rewind($handle); while(!feof($handle)) { //從文件讀二進制數據如文件 var_dump(fread($handle, 1024));//line1 line2 line3 } //關閉一個已打開文件的指針 fclose($handle); var_dump(memory_get_usage());//386984 rewind($handle2); while(!feof($handle2)) { var_dump(fread($handle2, 1024));//line4 line5 line6 } fclose($handle2); var_dump(memory_get_usage());//387984 //關閉一個已打開文件的指針 fclose($handle); ``` ``` //$hello, $php, $world 都是不同的流 $hello = fopen('php://memory', 'r+'); $php = fopen('php://memory', 'r+'); $world = fopen('php://memory', 'r+'); ``` **php://filter** 是一種元封裝器, 設計用于數據流打開時的篩選過濾應用。 這對于一體式(all-in-one)的文件函數非常有用,類似 readfile()、 file() 和 file_get_contents(), 在數據流內容讀取之前沒有機會應用其他過濾器 php://filter 目標使用以下的參數作為它路徑的一部分。 復合過濾鏈能夠在一個路徑上指定。詳細使用這些參數可以參考具體范例。 | 名稱 | 描述 | 示例| | --- | --- | --- | | resource=<要過濾的數據流> | 這個參數是必須的。它指定了你要篩選過濾的數據流。 |readfile("php://filter/resource=http://www.example.com");| | read=<讀鏈的篩選列表> | 該參數可選。可以設定一個或多個過濾器名稱,以管道符(\|)分隔。 | readfile("php://filter/read=string.toupper|string.rot13/resource=http://www.example.com"); | | write=<寫鏈的篩選列表> | 該參數可選。可以設定一個或多個過濾器名稱,以管道符(\|)分隔。 | file_put_contents("php://filter/write=string.rot13/resource=example.txt","Hello World"); | | <兩個鏈的篩選列表> | 任何沒有以*read=*或*write=*作前綴 的篩選器列表會視情況應用于讀或寫鏈。 | | ``` <?php include($_GET['file']) ?> ``` ``` http://127.0.0.1/code/1.php?file=php://filter/read=convert.base64-encode/resource=./phpinfo.php ``` 輸出 ![](https://img.kancloud.cn/3f/8e/3f8eca6936360f405d9ef3647ca9b18b_866x142.png) 解碼后 ![](https://img.kancloud.cn/e5/d2/e5d20d0e3c676ee9c69a8f36aa54302f_618x386.png) [**過濾器**](https://www.php.net/manual/zh/filters.string.php) * string.rot13 等同于用 str_rot13()函數,將26個英文字母的前世三個字符與后13個字符互換 (PHP 4.3.0) * string.toupper 等同于用 strtoupper(),將字符串轉換為大寫 (PHP 5.0.0) * string.tolower 同于用 strtolower(),將字符串轉換為小寫 (PHP 5.0.0) * string.strip_tags 等同于用 strip_tags(),從字符串中去除html和php標簽 (PHP 5.0.0) ``` //a b c d e f g h i j k l m //n o p q r s t u v w x y z str_rot13('revive')//erivi echo str_rot13('PHP 4.3.0'); // CUC 4.3.0 ``` >[info] stream_get_filters()可以打印出支持的過濾,[**php文檔的過濾器**](https://www.php.net/manual/zh/filters.string.php) 也有詳細介紹 **php://stdin**、**php://stdout** 和 **php://stderr** 允許直接訪問 PHP 進程相應的輸入或者輸出流。 數據流引用了復制的文件描述符,所以如果你打開 php://stdin 并在之后關了它, 僅是關閉了復制品,真正被引用的 STDIN 并不受影響。 注意 PHP 在這方面的行為有很多 BUG 直到 PHP 5.2.1。 推薦你簡單使用常量 STDIN、 STDOUT 和 STDERR 來代替手工打開這些封裝器。 php://stdin 是只讀的, php://stdout 和 php://stderr 是只寫的 **php://output和php://stdout的區別** php://stdout是PHP進程的標準輸出流,php://output是返回的結果數據流。 ~~~ 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 */ ~~~ 推薦使用常量 STDIN、 STDOUT 和 STDERR 來代替手工打開這些封裝器 ![](https://img.kancloud.cn/37/12/37128d4152cd5f22d6f108be08b3304d_529x673.png) ~~~ while($line = fopen('php://stdin','r')){ echo fgets($line); } ?> // 結果 D:\phpStudy\WWW\test>php test.php 12345你好 12345你好 ~~~ ~~~ <?php echo STDIN; ?> // 結果 D:\phpStudy\WWW\test>php test.php Resource id #1 ~~~ ~~~ <?php echo fgets(STDIN); ?> //STDIN可以拿到在dos下輸入的內容,fgets讀取這個STDIN文件句柄,即可打印出剛才輸入的內容 D:\phpStudy\WWW\test>php test.php nnnn nnnn ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看