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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                當PHP腳本有輸出時,輸出控制函數可以用這些來控制輸出。這在多種不同情況中非常有用,尤其是用來在腳本開始輸出 數據后,發送http頭信息到瀏覽器。輸出控制函數不影響由[header()](https://www.php.net/manual/zh/function.header.php)或[setcookie()](https://www.php.net/manual/zh/function.setcookie.php)發送的文件頭信息,僅影響象[echo](https://www.php.net/manual/zh/function.echo.php)這樣的函數和PHP代碼塊間的數據。 > **Note**: > 由于早先的版本的缺陷,當從PHP4.1.x(4.2.x,4.3.x)升級時,必須保證php.ini中的*implicit\_flush*是*OFF*, 否則任何用[ob\_start()](https://www.php.net/manual/zh/function.ob-start.php)的輸出將在輸出中隱藏掉。 ## 運行時配置 **輸出控制配置選項** | 名字 | 默認 | 可修改范圍 | 更新日志 |描述 | --- | --- | --- | --- | --- | | output\_buffering | "0" | PHP\_INI\_PERDIR | ? |該選項設置為 On 時,將在所有的腳本中使用輸出控制。如果要限制輸出緩沖區的最大值,可將該選項設定為指定的最大字節數(例如 output\_buffering=4096)。從PHP 4.3.5 版開始,該選項在 PHP-CLI 下總是為 Off| | output\_handler | NULL | PHP\_INI\_PERDIR | 自 PHP 4.0.4 起可用 |該選項可將腳本所有的輸出,重定向到一個函數。例如,將 output\_handler 設置為[mb\_output\_handler()](https://www.php.net/manual/zh/function.mb-output-handler.php)時,字符的編碼將被修改為指定的編碼。設置的任何處理函數,將自動的處理輸出緩沖<br>不能同時使用[mb\_output\_handler()](https://www.php.net/manual/zh/function.mb-output-handler.php)和[ob\_iconv\_handler()](https://www.php.net/manual/zh/function.ob-iconv-handler.php),也不能同時使用[ob\_gzhandler()](https://www.php.net/manual/zh/function.ob-gzhandler.php)和[zlib.output\_compression](https://www.php.net/manual/zh/zlib.configuration.php#ini.zlib.output-compression)。<br>只有內置函數可以使用此指令。對于用戶定義的函數,使用[ob\_start()](https://www.php.net/manual/zh/function.ob-start.php)| | implicit\_flush | "0" | PHP\_INI\_ALL | 在 PHP <= 4.2.3 版本中是 PHP\_INI\_PERDIR |默認為 **`FALSE`** 。如將該選項改為 **`TRUE`** ,PHP 將使輸出層,在每段信息塊輸出后,自動刷新。這等同于在每次使用[print](https://www.php.net/manual/zh/function.print.php)、[echo](https://www.php.net/manual/zh/function.echo.php)等函數或每個*HTML*塊之后,調用 PHP 中的[flush()](https://www.php.net/manual/zh/function.flush.php)函數.不在web環境中使用 PHP 時,打開這個選項對程序執行的性能有嚴重的影響,通常只推薦在調試時使用。在*CLI SAPI*的執行模式下,該標記默認為 **`TRUE`**| 函數: ob_start([[callback`$output_callback`[, int`$chunk_size`[, bool`$erase`]]] ) :bool](https://www.php.net/manual/zh/function.ob-start.php)— 打開輸出控制緩沖 [flusht():void](https://www.php.net/manual/zh/function.flush.php)— 刷新輸出緩沖 [ob_flusht():void](https://www.php.net/manual/zh/function.ob-flush.php)— 沖刷出(送出)輸出緩沖區中的內容 [ob_clean():void](https://www.php.net/manual/zh/function.ob-clean.php)— 清空(擦掉)輸出緩沖區 [ob_end_clean():bool](https://www.php.net/manual/zh/function.ob-end-clean.php)— 清空(擦除)緩沖區并關閉輸出緩沖 [ob_end_flush():bool](https://www.php.net/manual/zh/function.ob-end-flush.php)— 沖刷出(送出)輸出緩沖區內容并關閉緩沖 [ob_get_clean():sring](https://www.php.net/manual/zh/function.ob-get-clean.php)— 得到當前緩沖區的內容并刪除當前輸出緩(圖片處理時常用)。 [ob_get_contents(void) :string](https://www.php.net/manual/zh/function.ob-get-contents.php)— 返回輸出緩沖區的內容 [ob_get_flush(void) :string](https://www.php.net/manual/zh/function.ob-get-flush.php)— 刷出(送出)緩沖區內容,以字符串形式返回內容,并關閉輸出緩沖區。 [ob_get_length(void) :int](https://www.php.net/manual/zh/function.ob-get-length.php)— 返回輸出緩沖區內容的長度 [ob_get_level(void) :int](https://www.php.net/manual/zh/function.ob-get-level.php)— 返回輸出緩沖機制的嵌套級別 [ob_get_status([bool`$full_status`= FALSE] ) :array](https://www.php.net/manual/zh/function.ob-get-status.php)— 得到所有輸出緩沖區的狀態(數組形式返回,默認返回最頂層,參數為true時返回所有) [ob\_gzhandler(string`$buffer`,int`$mode`) :string](https://www.php.net/manual/zh/function.ob-gzhandler.php)— 在ob\_start中使用的用來壓縮輸出緩沖區中內容的回調函數。ob\_start callback function to gzip output buffer [ob\_implicit\_flush(\[int`$flag`\= true\] ) :void](https://www.php.net/manual/zh/function.ob-implicit-flush.php)— 打開/關閉絕對刷送 [ob\_list\_handlers(void) :array](https://www.php.net/manual/zh/function.ob-list-handlers.php)— 列出所有使用中的輸出處理程序。 [output\_add\_rewrite\_var](https://www.php.net/manual/zh/function.output-add-rewrite-var.php)— 添加URL重寫器的值(Add URL rewriter values) [output\_reset\_rewrite\_vars](https://www.php.net/manual/zh/function.output-reset-rewrite-vars.php)— 重設URL重寫器的值(Reset URL rewriter values) 輸出緩沖區處理函數的作用有點類似堆棧,臨時放入一個存儲空間中,對內容進行處理 控制在ob\_start()和ob\_get\_contents()或ob\_start()和ob\_get\_clean()中間內容 **例1:** ``` //可將緩沖區看做一個容器 ob_start(); // 開啟緩沖區 //ob_start()與 ob_get_contents()之間的內容不會直接輸出而是會被存儲起來,供ob_get_contents和ob_get_clean()輸出 echo 1; echo 3; $content = ob_get_contents(); //從緩沖區獲取內容 //ob_get_contents與ob_end_clean之間的內容會被忽略 echo 2; ob_end_clean();//清除存儲的內容 echo 4; echo $content ; ``` 輸出:413 ***** **例2:** ``` ob_start(); //ob_start()與 ob_get_contents()之間的內容會被存儲起來,供ob_get_contents和ob_get_clean()輸出 echo 'a'; echo 'c'; $content = ob_get_clean(); echo 'b'; echo 'd'; echo $content ; ``` 輸出:bdac **例3:** ``` ob_start(); //ob_start()與 ob_get_contents()之間的內容會被存儲起來,供ob_get_contents和ob_get_clean()輸出 echo 'a'; echo 'c'; ob_start(); echo 1; $content2 = ob_get_clean(); $content = ob_get_clean(); echo 'b'; echo 'd'; echo $content ; echo $content2 ; ``` 輸出:bdac1 **例4:** ``` ob_start(); echo 'a'; echo 'c'; ob_start(); echo 1; $content2 = ob_get_contents(); $content = ob_get_clean(); ob_end_clean(); echo 'b'; echo 'd'; echo $content ; echo $content2 ; ``` 輸出:bd11 運用場景: 參考模版布局,smarty 1、延遲輸出的時候有用 php是按腳本順序執行的 如果前面輸出了內容 ,執行到后面又想對前面已經輸出的內容要修改,這時候就有用 如下:將html緩存起來在回調中在修改替換緩存里的內容,然后在返回 ~~~ <?php function callback($buffer) { // replace all the apples with oranges return (str_replace("apples", "oranges", $buffer)); } ob_start("callback"); ?> <html> <body> <p>It's like comparing apples to oranges.</p> </body> </html> <?php ob_end_flush(); ?> ~~~ 2、比如你的程序需要輸出一些內容到瀏覽器,而在輸出的過程中因為某些異常或者錯誤需要放棄輸出,則通過ob緩沖系統可以不把內容輸出到瀏覽器(因為之前輸出的內容還是緩沖中,可以隨時清掉)。 比如某些函數是直接輸出的,而你又想只捕捉這些輸出而不讓它們傳到瀏覽器,也可以通過ob系統來進行捕捉。 var_dump等輸出的內容以字符串的形式返回給瀏覽器(這個可以修改直接輸出的內容) ~~~ ob_start(); var_dmp($data); $result = ob_get_clean(); 具體如:tp5的dump函方法: /** * 瀏覽器友好的變量輸出 * @access public * @param mixed $var 變量 * @param boolean $echo 是否輸出(默認為 true,為 false 則返回輸出字符串) * @param string|null $label 標簽(默認為空) * @param integer $flags htmlspecialchars 的標志 * @return null|string */ public static function dump($var, $echo = true, $label = null, $flags = ENT_SUBSTITUTE) { $label = (null === $label) ? '' : rtrim($label) . ':'; ob_start(); var_dump($var); $output = preg_replace('/\]\=\>\n(\s+)/m', '] => ', ob_get_clean()); if (IS_CLI) { $output = PHP_EOL . $label . $output . PHP_EOL; } else { if (!extension_loaded('xdebug')) { $output = htmlspecialchars($output, $flags); } $output = '<pre>' . $label . $output . '</pre>'; } if ($echo) { echo($output); return; } return $output; } ~~~ ## **實時輸出到瀏覽器** 執行時間較長的任務需要在瀏覽器實時查看執行情況 ``` header("Content-type:text/html;charset=utf-8"); #設置執行時間不限時 set_time_limit(0); #清除并關閉緩沖,輸出到瀏覽器之前使用這個函數。 ob_end_clean(); #控制隱式緩沖瀉出,默認off,打開時,對每個 print/echo 或者輸出命令的結果都發送到瀏覽器。 ob_implicit_flush(1); while(1){ //部分瀏覽器需要內容達到一定長度了才輸出 echo str_repeat("<div></div>", 200).'hello sjolzy.cn<br />'; sleep(1); //ob_end_flush(); //ob_flush(); //flush(); } ```
                  <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>

                              哎呀哎呀视频在线观看