php中ob_start()系列函式的使用
我在看《php設計模式》的時候看到一個有趣的函式ob_start(),查了一下網友的部落格,滿心歡喜,我們在平時做模版快取會選擇Smart,實際上我們可以自己來,不借助其他工具,對於我這樣對程式碼控制慾強的人來說簡直好東西。輸出控制函式可以幫助我們自由的控制php指令碼資料的輸出,對echo()這類函式起作用,但對header()等函式無效。所以我們利用這一點可以在header()函式之前進行輸出,實際上一開始僅僅是輸出到緩衝去並沒有真正的輸出,所以和header()之前輸出會報錯的說法並不矛盾。下面我們來看例子
1.簡單程式碼段
我建立了一個test.php
另外一個檔案inde.php<?php ob_start();//開啟緩衝區輸出 echo 'Hello';// header('location:index.php');瀏覽器被重定向到index.php ob_end_flush();//輸出全部內容到瀏覽器
<?php
echo '看看在之前還是之後輸出';
我原本以為會從test.php的內容輸出到index.php,但是並不會跨域輸出,依然僅僅是輸出到當前介面。這裡最值得注意的是通常情況下header()之前有輸出會報錯,但這裡並沒有,所以我們平常的說法要改一改了header()輸出到瀏覽器頁面會報錯,這樣說才對。2.相關函式介紹
1)FLUSH():重新整理緩衝區的內容,輸出。
函式格式:flush()
說明:這個函式經常使用,效率高。
2)ob_start():開啟緩衝區
函式格式:void ob_start();
說明:他的作用就是開啟緩衝區,所有非標頭檔案的輸出都會到緩衝區,作用就類似於我們使用GD庫的時候建立的畫布,可以使用ob_get_flush()或flush()輸出緩衝區內容。
3)ob_get_contents()返回緩衝區內的內容
函式格式:string ob_get_contents()
說明:如果沒有啟用緩衝區,將會返回FALSE
4)ob_get_length():返回內部緩衝區的長度
函式格式:init ob_get_length()
說明:緩衝區沒有啟用將會返回FALSE
5)ob_end_flush():輸出緩衝區內容,關閉緩衝區
函式格式:void ob_end_flush()
6)ob_end_clean():刪除緩衝區內容並關閉
函式格式:void ob_end_clean()
說明:注意這裡並不會輸出,而是起到型別銷燬資源控制代碼一樣的作用
7)ob_implicit_flush:開啟或關閉絕對重新整理
函式格式:void ob_implicit_flush([int flag])
說明:預設關閉緩衝區,開啟絕對輸出後,每個指令碼都直接傳送到瀏覽器,不再需要使用flush()
8)ob_clean()清空緩衝區內容,但並不會銷燬緩衝區
寫程式碼的時候提示出來這樣一個函式,注意和ob_end_clean()區別,這裡補上。
3.flush()深入
他的作用是,重新整理快取(cache),這樣的輸出會在資料量超過256時才會被源源不斷的輸出。
<?php
for ($i = 0; $i< 300; $i++) {
echo $i.'-<br/>';
sleep(0.9);
<span style="font-family:Courier New;font-size:14px;color:#330000;">}</span>
這裡與上面不同的是,會直接輸出,並不會到達一定量才往外擠。直接使用ob_implicit_flush()寫在最開始,就不再需要使用flush()<?php
for ($i = 0; $i< 20; $i++) {
echo "$i";
flush();
sleep(2);
}
4.ob系列深入
我在看到別人寫的這個例子的時候,有些想法
<?php
ob_start();//開啟緩衝區域
phpinfo();//使用phpinfo()函式
$info=ob_get_flush();//將緩衝區內的資料儲存到變數中
file_put_contents('test.txt', $info);
ob_end_clean();<span style="font-family:Courier New;">//關閉輸出</span>
原本對於phpinfo()這樣的直接輸出函式我們是束手無策的,但是利用緩衝區輸出可以獲得phpinfo()內容,這裡要注意的是,瀏覽器還是會將phpinfo()列印到瀏覽器上,具體原因我也不清楚,大家找到原因了一定要告訴我。但是<?php
ob_start();
echo '1234';
ob_end_clean();
這樣子使用是不會直接輸出到瀏覽器,我們可以利用這個特性做模版快取。我在閱讀別人部落格的時候也提到了這些:
一、靜態模版技術(高大上的感覺底褲脫下來,感覺就沒什麼了)
這個高大上的說法是指:當用戶訪問一次以後,頁面內容沒有更新的情況下,我們快取為靜態HTML,當用戶再次訪問的時候直接讀取上一訪問的檔案,極大的減小系統的壓力。看到phpinfo()我想大家都想到了。但這裡要說明的是,這個使用者在跳轉後就需要重新開啟一個空間,所以要求我們在跳轉之前另外做儲存。
相關推薦
php中ob_start()系列函式的使用
我在看《php設計模式》的時候看到一個有趣的函式ob_start(),查了一下網友的部落格,滿心歡喜,我們在平時做模版快取會選擇Smart,實際上我們可以自己來,不借助其他工具,對於我這樣對程式碼控制慾強的人來說簡直好東西。輸出控制函式可以幫助我們自由的控制php指
php中的匿名函式和閉包
一:匿名函式 (在php5.3.0 或以上才能使用) php中的匿名函式(Anonymous functions), 也叫閉包函式(closures), 允許指定一個沒有名稱的函式。最常用的就是回撥函式的引數值。(http://php.net/m
PHP中的MD5()函式漏洞
文章目錄 1. MD5函式漏洞 2.PHP特性 3.MD5碰撞 1. MD5函式漏洞 $_GET['a'] != $_GET['b'] && MD5($_GET['a']) == MD5($_GE
php中的匿名函式和閉包(closure)
一:匿名函式 (在php5.3.0 或以上才能使用) php中的匿名函式(Anonymous functions), 也叫閉包函式(closures), 允許指定一個沒有名稱的函式。最常用的就是回撥函式的引數值。(http://php.net/m
PHP中的strpos()函式
strpos()函式是用來查詢字串首次出現的位置,返回型別為int,但是如是找不到該字元,返回布林型的false值。 1.判斷一個字串是否包含另一個字串,示例程式碼如下: <?php header('content-type:text/html;charset=utf-8'); $a
php中常用的函式
strpos() 判斷字串中是否包含某字串,有的話返回其未知,沒有話返回false 錯誤用法: if(strpos('www.idc-gz.com','idc-gz') ){ echo '包含'; }else{ echo '不包含';} 理由: 上面也能得出正確的結果,但方法是錯誤的
PHP中常用的函式列表(收藏起來慢慢記)
usleep() 函式延遲程式碼執行若干微秒。unpack() 函式從二進位制字串對資料進行解包。uniqid() 函式基於以微秒計的當前時間,生成一個唯一的 ID。time_sleep_until() 函式延遲程式碼執行直到指定的時間。time_nanosleep() 函式延遲程式碼執行若干秒和納秒。s
PHP中呼叫mail()函式傳送郵件所需sendmail的基本配置和html格式的郵件資訊
首先從http://glob.com.au/sendmail上下載sendmail壓縮包;並將其解壓到D:盤中(一般最好不要解壓到C:盤,且目錄不要太長)。 設定一下PHP.ini檔案: [mail function] ; For Win32 only. ; http://
在php中使用mb_strlen()函式和mb_substr()函式
php預設是不支援mb_strlen()函式的,需要安裝擴充套件模組。安裝方法如下: yum install php-mbstring 找到mbstring.so的位置,可以使用rpm -ql 安裝的rpm名 修改/etc/php.ini配置檔案,增加 exten
PHP中MySQL相關函式
mysql_affected_rows — 取得前一次 MySQL 操作所影響的記錄行數 mysql_client_encoding — 返回字符集的名稱 mysql_close — 關閉 MySQL 連線 mysql_connect — 開啟一個到 MySQL 伺服器的連線 mysql_creat
Linux中exec系列函式的應用
這段時間在研究linux中使用者登陸和shell執行程式的原理。我們知道,shell命令分為內部命令和外部命令,內部命令有諸如cd,history,exit,echo等,常見的外部命令有ls,ping,netstat等,通過type命令可以檢視一個命令是內部命令還是外部命令
php中的sprintf()函式的format格式字串
上次碰到的ASCII碼問題,檢視別人部落格時,發現使用sprintf(),可以來輸出。這個輸出函式,以前也看了好多次,然而並未仔細看它的用途。這次就徹底檢視手冊,整明白,到底可以做什麼。就有了如下的文件翻譯,因中文文件該函式文件也是英文,只能是自己有限的翻譯下: form
PHP中遞迴函式的一個常見邏輯問題
首先,我們得知道遞迴函式是什麼東西,通俗來講也就是自己呼叫自己本身的函式。 現在需要設計一段程式碼,解決1到10疊加的問題。 程式碼A: <?php //遞迴函式 $num=10; function add($sum){ static $tot; if
PHP 中的mktime()函式
上週寫一個介面,用到了本週的開始時間和結束時間作為篩選條件去篩選資料,我只記得有mktime()這個函式,具體怎麼用的不太清楚,於是百度之,找到了這個:本週開始時間:date("Y-m-d H:i:s"
php中的mail函式可以直接發郵件
<?php $subject = "test"; $content = "testcontent"; $to = '[email protected]';
Linux中backtrace()系列函式的應用例項
一、引言 backtrace()系列函式可用來輸出程式碼出錯時的函式呼叫關係。 A backtrace is the series of currently active function calls for the program. #include <ex
php中一些簡單函式
1. 替換字串的內容 $beginTime = str_replace ( "%20", " ", $beginTime ); 解釋: 把$beginTime中的'%20'替換成空格 2. 用特定字串把一個字串分割成陣列 $ss = explode ( "_", $
tensorflow中的reduce_xx系列函式
所謂reduce就是降維的意思, 我們以reduce_sum函式為例 呼叫reduce_sum(arg1, arg2)時,引數arg1即為要求和的資料,arg2有兩個取值分別為0和1,通常用reduction_indices=[0]或reduction_indices=[1]來傳遞引數。
PHP中的一些常用函式
<?php //===============================時間日期=============================== //y返回年最後兩位,Y年四位數,m月份數字,M月份英文。d月份幾號數字,D星期幾英文 $date=date("Y-m-d"); $date=dat
PHP中什麼是關鍵字,操作符和函式?
PHP中什麼是關鍵字,操作符和函式? 關鍵字 所謂關鍵字就是已被:語言本身使用, 不能作其它用途使用的字。 操作符 操作符是在表示式中用於連線不同物件的運算子,不同的操作符指定了不同的運算方式。 可以把操作符理解為語言內建的,最基礎的函式,不可代替的函式! 操作符本質上也是