欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

php拿到緩沖區(qū)的數(shù)據(jù) php拿到緩沖區(qū)的數(shù)據(jù)怎么處理

php中mysql操作buffer用法詳解

本文實例講述了php中mysql操作buffer用法。分享給大家供大家參考。具體分析如下:

成都創(chuàng)新互聯(lián)公司于2013年成立,先為東鄉(xiāng)等服務建站,東鄉(xiāng)等地企業(yè),進行企業(yè)商務咨詢服務。為東鄉(xiāng)企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務解決您的所有建站問題。

php與mysql的連接有三種方式,mysql,mysqli,pdo。不管使用哪種方式進行連接,都有使用buffer和不使用buffer的區(qū)別。

什么叫使用buffer和不使用buffer呢?

客戶端與mysql服務端進行查詢操作,查詢操作的時候如果獲取的數(shù)據(jù)量比較大,那個這個查詢結果放在哪里呢?

有兩個地方可以放:客戶端的緩沖區(qū)和服務端的緩沖區(qū)。

我們這里說的buffer指的是客戶端的緩沖區(qū),如果查詢結果已經(jīng)從服務端獲取回來了,放置在了客戶端的緩沖區(qū),我們就稱之為使用buffer。如果還是存放在服務端的緩沖區(qū)的話,我們就說沒有使用buffer(unbuffer)。

使用buffer和不使用buffer有什么區(qū)別?

主要在內(nèi)存方面,使用buffer會增加客戶端的內(nèi)存壓力,當返回的數(shù)據(jù)結果特別大的時候可能會占用調(diào)用客戶端(實際就是一個php進程)比較大的進程。不使用buffer自然對服務端(這里說的是提供mysql服務的服務器)壓力更大。

具體可以參考:PHP查詢MySQL大量數(shù)據(jù)的內(nèi)存占用分析

php中三種模式是如何設置是否使用buffer的?

mysql默認的query是使用buffer的,而不使用buffer就需要使用mysql_unbuffer_query

mysqli默認的query是不使用buffer的,要使用buffer就需要設置MYSQLI_STORE_RESULT

pdo默認的quey是不使用buffer的,要使用buffer就需要設置MYSQL_ATTR_USE_BUFFERED_QUERY

大致相關代碼如下:

?php

$dbConfig

=

array(

'host'

=

'10.128.11.101',

'port'

=

'3306',

'user'

=

'test',

'pass'

=

'test',

'db'

=

'test',

);

$sql

=

'select

*

from

so_topic_app';

//---------mysql----------//

$db

=

mysql_connect($dbConfig['host'],

$dbConfig['user'],

$dbConfig['pass']);

mysql_select_db($dbConfig['db'],

$db);

mysql_set_charset('utf8',

$db);

//

mysql使用buffer

$res

=

mysql_query($sql,

$db);

$data

=

array();

while($row

=

mysql_fetch_row($res))

{

$data[]

=

$row;

}

//

mysql不使用buffer

$res

=

mysql_unbuffered_query($sql,

$db);

$data

=

array();

while($row

=

mysql_fetch_row($res))

{

$data[]

=

$row;

}

mysql_close($db);

//---------mysqli----------//

$db

=

mysqli_connect($dbConfig['host'],

$dbConfig['user'],

$dbConfig['pass'],

$dbConfig['db']);

//

mysqli不使用buffer

$result

=

mysqli_query($db,

$sql);

$data

=

array();

while($row

=

$result-fetch_array())

{

$data[]

=

$row;

}

//

mysqli使用buffer

$result

=

mysqli_query($db,

$sql,

MYSQLI_STORE_RESULT);

$data

=

array();

while($row

=

$result-fetch_array())

{

$data[]

=

$row;

}

mysqli_free_result($result);

mysqli_close($db);

//---------pdo----------//

$dsn

=

"mysql:dbname={$dbConfig['db']};host={$dbConfig['host']}";

$pdo

=

new

PDO($dsn,

$dbConfig['user'],

$dbConfig['pass']);

//

pdo不使用buffer

$stmt

=

$pdo-prepare($sql);

$stmt-execute();

$data

=

array();

$data

=

$stmt-fetchAll();

//

pdo使用buffer

$pdo-setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,

true);

$stmt

=

$pdo-prepare($sql);

$stmt-execute();

$data

=

array();

$data

=

$stmt-fetchAll();

后續(xù)

當然如果數(shù)據(jù)量非常大的話,大部分人還是會考慮使用分批次來提取和處理數(shù)據(jù)。所以實際上需要我們關注和使用mysql是使用buffer還是不使用buffer的場景非常少。

希望本文所述對大家的php程序設計有所幫助。

PHP 能將數(shù)據(jù)入瀏覽器緩存嗎?如果能求講解!

不知閣下需要的是怎樣的緩存?純客戶端?還是怎樣的,以下可供參考:

一:儲存于客戶端的信息,頁面調(diào)用時無需從服務器解析直接使用(常見的即為Cookie,還有HTML5里的localStorage,Application Cache);

二:離線性質(zhì),即用戶不在線時,也可以正常訪問網(wǎng)頁,所訪問的數(shù)據(jù)即客戶端儲存的緩存(HTML5中的應用程序緩存,即Application Cache);

三:客戶端與服務端共同緩存的,這種方法可使已經(jīng)從數(shù)據(jù)庫查詢的數(shù)據(jù)、已通過程序計算得到的數(shù)據(jù)存于服務器,服務器解析時直接調(diào)用,無需再處理得到,大大減輕了服務器的壓力(常見的即為session,HTML5中為sessionStorage);

四:純服務端,同三,即將服務器已經(jīng)處理好的數(shù)據(jù)暫存于服務器,需要時直接調(diào)用而無需再次處理以便提高效率和減輕服務器壓力(服務器端的緩存機制非常多,網(wǎng)站開發(fā)者基本都會);

php緩存技術比較?。?!

ob_get_contents, ob_end_clean從實現(xiàn)上應該是ob_get_clean的分解步驟。后者因為從c代碼層面的整合,在僅單次執(zhí)行時,速度上應該有微量的優(yōu)勢。因為優(yōu)勢遠比網(wǎng)絡IO的延遲要小,幾乎可以忽略吧。

echo ob_get_contents應該也一般是用于首次生成模板緩存。是內(nèi)存操作。

include用于直接顯示。是文件操作。

顯示模板可以用后者,做緩存所節(jié)約的時間主要是處理計算和各媒介之間的IO上的,根據(jù)自己的應用和自己的設備環(huán)境在慢的、瓶頸部分作出調(diào)整,是靈活的。沒有定式。

求教php 緩沖區(qū)問題

首先你找到php 的配置文件php.ini

1.php.ini中的output_buffering配置

Off: 表示關閉PHP輸出緩存

On: 打開無限大的輸出緩存

4096: 打開大小為4096Byte的輸出緩存

2.php.ini中的implicit_flush配置

On: 表示每次輸出(如echo,print)后自動調(diào)用flush()函數(shù)后,直接輸出

Off: 與On相反,每次輸出后不會調(diào)用flush(),需要等到server buffering滿了才會輸出,但是我們可以用flush()函數(shù)代替它,不開啟也沒關系,反而更加靈活

3.ob_flush()函數(shù): 取出PHP buffering中的數(shù)據(jù),放入server buffering

4.flush()函數(shù): 取出Server buffering的數(shù)據(jù),放入browser buffering

5.ob_start()函數(shù):對于這個函數(shù)我現(xiàn)在了解的不是很清楚,因為開啟后輸出就會不受ob_flush()控制,即使使用ob_flush()和flush(),數(shù)據(jù)也不能立即輸出在瀏覽器上.現(xiàn)在知道的是,如果output_buffering=Off,即使使用了ob_start(),也是無法將輸出數(shù)據(jù)緩存的,而如果output_buffering=On的話,即使不用ob_start(),輸出數(shù)據(jù)也可以被PHP緩存,所以覺得ob_start比較廢,暫時不管他

然后我們來看代碼吧(設置output_buffering=4096,implicit_flush=Off)

最后的打印效果是

每隔一秒輸出一個

html

body

?php

// ob_start(); //這玩意開了就會不正常,輸出不受ob_flush()控制,不知道到底干嘛用

// echo str_repeat(' ' ,1000); //IE緩存256Bytes

echo str_repeat(' ' ,1000); //Chrome和FF緩存1000Bytes,這里用來先將瀏覽器緩存用掉,但是很疑惑這一行輸出為什么沒有被output_buffering存起來,而是直接輸出了

for($i=0;$i5;$i++) {

echo $i.'br /';

ob_flush();

flush();

sleep(1);

}

?

/body

/html

至于你的可以這么寫

?php

echo str_repeat(' ' ,1000);

echo 'abr/';

ob_flush();

flush();

sleep(3);

echo 'bbr/';

?

當前題目:php拿到緩沖區(qū)的數(shù)據(jù) php拿到緩沖區(qū)的數(shù)據(jù)怎么處理
URL標題:http://chinadenli.net/article46/hgcdeg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、網(wǎng)站維護、網(wǎng)站排名、網(wǎng)站收錄、建站公司、外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設計