導航:首頁 > 編程語言 > phpobgzhandler

phpobgzhandler

發布時間:2022-09-07 03:38:54

① wordpress優化怎麼開啟GZIP壓縮

方法一、通過修改index.php文件開啟Gzip壓縮
下載Wordpress網站根目錄index.php文件到本地,用專業網頁或代碼編輯軟體打開編輯,請勿使用系統自帶的記事本。填的時候注意標點符號,需英文狀態輸入。
在打開的index.php
中找到:
define(』WP_USE_THEMES』,
true);
在後面加上:
ob_start(『ob_gzhandler』)
這種方法最簡單,推薦使用。不過有個弊端,就是當wordpress系統升級後需要重新設置。
方法二、通過.htaccess啟用Gzip壓縮
如果你的網站空間或伺服器支持.htaccess文件,那麼在wordpress根目錄的.htaccess中添加以下代碼,然後上傳到wordpress根目錄即可。
用FTP軟體登陸Wordpress博客網站目錄。
右鍵.htaccess文件-編輯,打開.htaccess文件。在最後面加上第3點中介紹的兩種代碼中的任意一種。
實現gzip壓縮代碼有兩種具體如下:
第一種:php_value
output_handler
ob_gzhandler
第二種:
<IfMole
mod_expires.c>
ExpiresActive
On
ExpiresByType
image/gif
A2592000
ExpiresByType
image/jpeg
A2592000
ExpiresByType
image/png
A2592000
ExpiresByType
image/x-icon
A2592000
ExpiresByType
application/x-javascript
A604800
ExpiresByType
text/css
A604800
</IfMole>
<IfMole
mod_deflate.c>
SetOutputFilter
DEFLATE
AddOutputFilterByType
DEFLATE
text/html
text/css
image/gif
image/jpeg
image/png
application/x-javascript
</IfMole>
方法三、通過php.ini
啟用Gzip壓縮
如果伺服器支持php.ini重定義的話,可以在php.ini中增加以下代碼來開啟gzip。
zlib.output_compression_level
=
number
其中number為1—9的值,1的壓縮比率最低,
建議取5。
方法四、安裝gzippy插件開啟Gzip壓縮
下載Gzippy插件(下載地址見參考資料。),點wordpress後台的安裝插件-上傳-選擇文件-現在安裝,安裝完成後啟動插件即可。
方法五、利用WP
Super
Cache緩存插件自帶功能開啟Gzip壓縮
已安裝WP
Super
Cache緩存插件的朋友,可以在WP
Super
Cache設置-高級選項中勾選Compress
pages
so
they』re
served
more
quickly
to
visitors.(Recommended)一項,這樣也可以開啟Gzip壓縮。不過勾選這個選項可能導致網頁亂碼。
方法六、Cpanel控制面板的空間開啟Gzip壓縮
使用Cpanel面板的空間如果伺服器支持,可以在Cpanel後台設置開啟網站Gzip壓縮。在Cpanel面板的軟體欄目-優化網站中進行設置。點優化網站後,選擇壓縮所有內,然後更新設置。
查看Gzip是否開啟成功
選擇以上任一適合自己的方法設置好之後,大家可以到Gzip壓縮檢測網頁(見參考資料)進行測試,看看wordpress
Gzip壓縮有沒有成功。祝你成功。以下是本人博客的Gzip檢測圖-Gzip壓縮已開啟:
注意事項及說明
如果在.htaccess文件中禁止了gzip功能的話,那在php.ini文件中開啟後也需在.htaccess文件中開啟gzip,否則沒有效果。
開啟wordpress的gzip功能後,伺服器將在頁面傳輸前將頁面壓縮後傳送,可以有效減少伺服器的帶寬使用,也可以加速頁面下載。
另外請注意只能選擇一種方式來開啟wordpress
gzip壓縮,否則有可能造成沖突,請謹記。

② php echo 形式輸出的圖片怎樣讓瀏覽器緩存(緩存相關的http頭已經試過了,無效,每次都是200),謝謝

Output Control 函數可以讓你自由控制腳本中數據的輸出。它非常地有用,特別是對於:當你想在數據已經輸出後,再輸出文件頭的情況。
輸出控制函數不對使用 header() 或 setcookie(), 發送的文件頭信息產生影響,只對那些類似於 echo() 和 PHP 代碼的數據塊有作用。
我們先舉一個簡單的例子,讓大家對Output Control有一個大致的印象:
Example 1.
復制代碼 代碼如下:
<?php
ob_start(); //打開緩沖區
echo \"Hellon\"; //輸出
header(「location:index.php」); //把瀏覽器重定向到index.php
ob_end_flush();//輸出全部內容到瀏覽器
?>
所有對header()函數有了解的人都知道,這個函數會發送一段文件頭給瀏覽器,但是如果在使用這個函數之前已經有了任何輸出(包括空輸出,比如空格,回車和換行)就會提示出錯。如果我們去掉第一行的ob_start(),再執行此程序,我們會發現得到了一條錯誤提示:「Header had all ready send by」!但是加上ob_start,就不會提示出錯,原因是當打開了緩沖區,echo後面的字元不會輸出到瀏覽器,而是保留在伺服器,直到你使用 flush或者ob_end_flush才會輸出,所以並不會有任何文件頭輸出的錯誤!
一、 相關函數簡介:
1、Flush:刷新緩沖區的內容,輸出。
函數格式:flush()
說明:這個函數經常使用,效率很高。
2、ob_start :打開輸出緩沖區
函數格式:void ob_start(void)
說明:當緩沖區激活時,所有來自PHP程序的非文件頭信息均不會發送,而是保存在內部緩沖區。為了輸出緩沖區的內容,可以使用ob_end_flush()或flush()輸出緩沖區的內容。
3 、ob_get_contents :返回內部緩沖區的內容。
使用方法:string ob_get_contents(void)
說明:這個函數會返回當前緩沖區中的內容,如果輸出緩沖區沒有激活,則返回 FALSE 。
4、ob_get_length:返回內部緩沖區的長度。
使用方法:int ob_get_length(void)
說明:這個函數會返回當前緩沖區中的長度;和ob_get_contents一樣,如果輸出緩沖區沒有激活。則返回 FALSE。
5、ob_end_flush :發送內部緩沖區的內容到瀏覽器,並且關閉輸出緩沖區。
使用方法:void ob_end_flush(void)
說明:這個函數發送輸出緩沖區的內容(如果有的話)。
6、ob_end_clean:刪除內部緩沖區的內容,並且關閉內部緩沖區
使用方法:void ob_end_clean(void)
說明:這個函數不會輸出內部緩沖區的內容而是把它刪除!
7、ob_implicit_flush:打開或關閉絕對刷新
使用方法:void ob_implicit_flush ([int flag])
說明:使用過Perl的人都知道$|=x的意義,這個字元串可以打開/關閉緩沖區,而ob_implicit_flush函數也和那個一樣,默認為關閉緩沖區,打開絕對輸出後,每個腳本輸出都直接發送到瀏覽器,不再需要調用 flush()
二、深入了解:
1. 關於Flush函數:
這個函數在PHP3中就出現了,是一個效率很高的函數,他有一個非常有用的功能就是刷新browser的cache.我們舉一個運行效果非常明顯的例子來說明flush.
Example 2.
復制代碼 代碼如下:
<?php
for($i = 1; $i <= 300; $i++ ) print(「 「);
// 這一句話非常關鍵,cache的結構使得它的內容只有達到一定的大小才能從瀏覽器里輸出
// 換言之,如果cache的內容不達到一定的大小,它是不會在程序執行完畢前輸出的。經
// 過測試,我發現這個大小的底限是256個字元長。這意味著cache以後接收的內容都會
// 源源不斷的被發送出去。
For($j = 1; $j <= 20; $j++) {
echo $j.」
」;
flush(); //這一部會使cache新增的內容被擠出去,顯示到瀏覽器上
sleep(1); //讓程序「睡」一秒鍾,會讓你把效果看得更清楚
}
?>
具體效果你可以到這里看看http://www.php2000.com/~uchinaboy/out.php
PHP2000的最新的PHP聊天室就是用的這個技術,可惜的是源代碼未公開 L
註:如果在程序的首部加入ob_implicit_flush()打開絕對刷新,就可以在程序中不再使用flush(),這樣做的好處是:提高效率!
2. 關於ob系列函數:
我想先引用我的好朋友y10k的一個例子:
Example 3.
比如你用得到伺服器和客戶端的設置信息,但是這個信息會因為客戶端的不同而不同,如果想要保存phpinfo()函數的輸出怎麼辦呢?在沒有緩沖區控制之前,可以說一點辦法也沒有,但是有了緩沖區的控制,我們可以輕松的解決:
復制代碼 代碼如下:
<?php
ob_start(); //打開緩沖區
phpinfo(); //使用phpinfo函數
$info=ob_get_contents(); //得到緩沖區的內容並且賦值給$info
$file=fopen(\'info.txt\',\'w\'); //打開文件info.txt
fwrite($file,$info); //寫入信息到info.txt
fclose($file); //關閉文件info.txt
?>
用以上的方法,就可以把不同用戶的phpinfo信息保存下來,這在以前恐怕沒有辦法辦到!其實上面就是將一些「過程」轉化為「函數」的方法!
或許有人會問:「難道就這個樣子嗎?還有沒有其他用途?」當然有了,比如筆者論壇的PHP 語法加亮顯示就和這個有關(PHP默認的語法加亮顯示函數會直接輸出,不能保存結果,如果在每次調用都顯示恐怕會很浪費CPU,筆者的論壇就把語法加亮函數顯示的結果用控制緩沖區的方法保留了),大家如果感興趣的話可以來看看http://www.zphp.com/bbs/!
可能現在大家對ob_start()的功能有了一定的了解,上面的一個例子看似簡單,但實際上已經掌握了使用ob_start()的要點。
<1>.使用ob_start打開browser的cache,這樣可以保證cache的內容在你調用flush(),ob_end_flush()(或程序執行完畢)之前不會被輸出。
<2>.現在的你應該知道你所擁有的優勢:可以在任何輸出內容後面使用header,setcookie以及session,這是 ob_start一個很大的特點;也可以使用ob_start的參數,在cache被寫入後,然後自動運行命令,比如 ob_start(\"ob_gzhandler\");而我們最常用的做法是用ob_get_contents()得到cache中的內容,然後再進行處理……
<3>.當處理完畢後,我們可以使用各種方法輸出,flush(),ob_end_flush(),以及等到程序執行完畢後的自動輸出。當然,如果你用的是ob_get_contents(),那麼就要你自己控制輸出方式了。
來,讓我們看看能用ob系列函數做些什麼……
一、 靜態模版技術
簡介:所謂靜態模版技術就是通過某種方式,使得用戶在client端得到的是由PHP產生的html頁面。如果這個html頁面不會再被更新,那麼當另外的用戶再次瀏覽此頁面時,程序將不會再調用PHP以及相關的資料庫,對於某些信息量比較大的網站,例如sina,163,sohu。類似這種的技術帶來的好處是非常巨大的。
我所知道的實現靜態輸出的有兩種辦法:
<1>.通過y10k修改的phplib的一個叫template.inc.php類實現。
<2>.使用ob系列函數實現。
對於第一種方法,因為不是這篇文章所要研究的問題,所以不再贅述。
我們現在來看一看第二種方法的具體實現:
Example 4.
<?php
ob_start();//打開緩沖區
?>
php頁面的全部輸出
<?
$content = ob_get_contents();//取得php頁面輸出的全部內容
$fp = fopen(「output00001.html」, 「w」); //創建一個文件,並打開,准備寫入
fwrite($fp, $content); //把php頁面的內容全部寫入output00001.html,然後……
fclose($fp);
?>
這樣,所謂的靜態模版就很容易的被實現了……
二、 捕捉輸出
以上的Example 4.是一種最簡單的情況,你還可以在寫入前對$content進行操作……
你可以設法捕捉一些關鍵字,然後去對它進行再處理,比如Example 3.所述的PHP語法高亮顯示。個人認為,這個功能是此函數最大的精華所在,它可以解決各種各樣的問題,但需要你有足夠的想像力……
Example 5.
<?
Function run_code($code) {
If($code) {
ob_start();
eval($code);
$contents = ob_get_contents();
ob_end_clean();
}else {
echo 「錯誤!沒有輸出」;
exit();
}
return $contents;
}
以上這個例子的用途不是很大,不過很典型$code的本身就是一個含有變數的輸出頁面,而這個例子用eval把$code中的變數替換,然後對輸出結果再進行輸出捕捉,再一次的進行處理……
Example 6. 加快傳輸
<?
/*
** Title.........: PHP4 HTTP Compression Speeds up the Web
** Version.......: 1.20
** Author........: catoc <[email protected]>
** Filename......: gzdoc.php
** Last changed..: 18/10/2000
** Requirments...: PHP4 >= 4.0.1
** PHP was configured with --with-zlib[=DIR]
** Notes.........: Dynamic Content Acceleration compresses
** the data transmission data on the fly
** code by sun jin hu (catoc) <[email protected]>
** Most newer browsers since 1998/1999 have
** been equipped to support the HTTP 1.1
** standard known as \"content-encoding.\"
** Essentially the browser indicates to the
** server that it can accept \"content encoding\"
** and if the server is capable it will then
** compress the data and transmit it. The
** browser decompresses it and then renders
** the page.
**
** Modified by John Lim ([email protected])
** based on ideas by Sandy McArthur, Jr
** Usage........:
** No space before the beginning of the first \'<?\' tag.
** ------------Start of file----------
** |<?
** | include(\'gzdoc.php\');
** |? >
** |<HTML>
** |... the page ...
** |</HTML>
** |<?
** | gzdocout();
** |? >
** -------------End of file-----------
*/
ob_start();
ob_implicit_flush(0);
function CheckCanGzip(){
global $HTTP_ACCEPT_ENCODING;
if (headers_sent() || connection_timeout() || connection_aborted()){
return 0;
}
if (strpos($HTTP_ACCEPT_ENCODING, \'x-gzip\') !== false) return \"x-gzip\";
if (strpos($HTTP_ACCEPT_ENCODING,\'gzip\') !== false) return \"gzip\";
return 0;
}
/* $level = compression level 0-9, 0=none, 9=max */
function GzDocOut($level=1,$debug=0){
$ENCODING = CheckCanGzip();
if ($ENCODING){
print \"n<!-- Use compress $ENCODING -->n\";
$Contents = ob_get_contents();
ob_end_clean();
if ($debug){
$s = \"<p>Not compress length: \".strlen($Contents);
$s .= \"
Compressed length: \".strlen(gzcompress($Contents,$level));
$Contents .= $s;
}
header(\"Content-Encoding: $ENCODING\");
print \"x1fx8bx08x00x00x00x00x00\";
$Size = strlen($Contents);
$Crc = crc32($Contents);
$Contents = gzcompress($Contents,$level);
$Contents = substr($Contents, 0, strlen($Contents) - 4);
print $Contents;
print pack(\'V\',$Crc);
print pack(\'V\',$Size);
exit;
}else{
ob_end_flush();
exit;
}
}
?>
這是catoc的一段很早以前的代碼,是在weblogs.com看到的,他利用了zlib的函數,對傳輸的內容進行了壓縮,測試表明,對於10k以上的頁面,會產生效果,而且頁面越大,效果越明顯……

③ 我在本地測試php的源碼為什麼打不開後台呢

date_default_timezone_set
函數是PHP5.1.0版本後才支持的函數,請確認你的PHP版本是否高於5.1.0。
Fatal error: Call to undefined function: date_default_timezone_set() in d:\usr\www\html\admin\login.php on line 12
這句的意思是找不到date_default_timezone_set() 這個函數,也就是你的php引擎不認識date_default_timezone_set() 這個函數。

④ php ob_start提高多少速度

由於PHP是「一邊編譯一邊執行」的腳本語言,某種程度上也提供了一種相當方便的結果集緩存使用方法—通過動態include相應的數據定義代碼段的方式使用緩存。

近來做了一陣子程序性能的優化工作,有個比較有意思的想法,想提出來和大家交流一下。

Cache是「以空間換時間」策略的典型應用模式,是提高系統性能的一種重要方法。緩存的使用在大訪問量的情況下能夠極大的減少對資料庫操作的次數,明顯降低系統負荷提高系統性能。相比頁面的緩存,結果集是一種「原始數據」不包含格式信息,數據量相對較小,而且可以再進行格式化,所以顯得相當靈活。由於PHP是「一邊編譯一邊執行」的腳本語言,某種程度上也提供了一種相當方便的結果集緩存使用方法——通過動態include相應的數據定義代碼段的方式使用緩存。如果在「RamDisk」上建緩存的話,效率應該還可以得到進一步的提升。以下是一小段示例代碼,供參考。

// load data with cache

function
load_data($id,$cache_lifetime) {

// the return data

$data =
array();

// make cache filename

$cache_filename =
『cache_『.$id.『.php『;

// check cache file『s last modify time

$cache_filetime = filemtime($cache_filename);

if (time() -
$cache_filetime <= $cache_lifetime) {

//** the cache is not expire

include($cache_filename);

} else {

//** the cache is
expired

// load data from database

// ...

while
($dbo->nextRecord()) {

// $data[] = ...

}

// format
the data as a php file

$data_cache = "
while (list($key, $val) =
each($data)) {

$data_cache .= "\$data[『$key『]=array(『";

$data_cache .= "『NAME『=>\"".qoute($val[『NAME『])."\","

$data_cache .= "『VALUE『=>\"".qoute($val[『VALUE『])."\""

$data_cache .= ";);\r\n";

}

$data_cache = "?>\r\n";

// save the data to the cache file

if ($fd =
fopen($cache_filename,『w+『)) {

fputs($fd,$data_cache);

fclose($fd);

}

}

return $data;

}

?> 適用情況:

1.數據相對比較穩定,主要是讀取操作。

2.文件操作要比資料庫操作快。

3.復雜數據訪問,大數據量訪問,密集數據訪問,系統資料庫負載極重。

4.Web/DB分離結構或者多Web單DB結構。

未經證實的問題:

1.並發訪問時對文件的讀寫是否會引起鎖定問題。

2.涉及到的數據文件太多時,性能如何。

擴展思路:

1.生成JavaScript數據定義代碼,在客戶端調用。

2.還未想到……

望共同探討。

緩存

如果你想要讓自己龐大的PHP應用有更好的性能表現,採用緩存也是一種很好的方法。現在已經有許多緩存方案可供選擇,其中包括:Zend
Cache,APC,和Afterburner Cache。

所有這些產品都屬於「緩存模塊」。當第一次出現對.php文件的請求時,它們會在Web伺服器內存中保存PHP的中間代碼,此後就用「經過編譯」的版本響應後繼的請求。這種方法確實能夠改善應用的性能,因為它使得磁碟訪問量減低到了最少的程度(代碼已經讀取和解析),代碼直接在內存中運行使得伺服器響應請求的速度大大提高。當然,緩存模塊還會監視PHP源文件的變化,必要時重新緩存頁面,從而防止了用戶得到的頁面仍舊由過時的PHP代碼生成。由於緩存模塊能夠明顯地降低伺服器的負載、提高PHP應用的響應效率,因此它們非常適合於負載較大的網站使用。

如何選擇這些緩存產品

Zend Cache是Zend Technologies公司的商業軟體,而Zend
Technologies就是前面提到的那個為我們提供PHP引擎和免費Zend Optimizer的公司。Zend
Cache確實是名不虛傳!對於大型的PHP頁面,你可以感覺到第一次運行之後速度就會有所提高,而且伺服器也會有更多的可用資源。遺憾的是這個產品並不免費,不過在有些情形下它仍舊是物超所值。

Afterburner Cache是來自Bware Technologies的免費緩存模塊,當前這個產品還是Beta版。Afterburner
Cache的做法看起來與Zend Cache差不多,但它對性能的改善程度(還)不能與Zend Cache相比,而且它還不能與Zend
Optimizer一起工作。

APC是Alternative PHP Cache的縮寫,它是來自Community
Connect的又一個免費緩存模塊。這個產品已經具有足夠的穩定性供正式場合使用,而且它看起來也能在很大程度上提高響應請求的速度。

有關壓縮

來自Remote
Communications的免費Apache模塊mod_gzip就具有為支持這類內容編碼的瀏覽器壓縮靜態Web內容的能力。對於絕大多數靜態Web內容,mod_gzip都非常有效。mod_gzip可以方便地編譯到Apache裡面,也可以作為DSO使用。據Remote
communications公司說,mod_gzip也能夠壓縮來自mod_php、mod_perl等的動態內容。我試了一次又一次,但看來還是不行。我看了許多關於mod_gzip的論壇和文章,看來到了mod_gzip的下一個版本(可能是1.3.14.6f)這個問題有望得到解決。在此之前,我們可以在網站的靜態部分使用mod_gzip。

然而有時我們確實蹊要壓縮動態內容,所以必須找找其他辦法。有一種辦法是使用class.gzip_encode.php,這是一個可以用來壓縮頁面內容的PHP類,具體方法是在PHP腳本的開頭和末尾調用該類的某些函數。如果要在網站級實現這個方案,可以從php.ini文件的auto_prepend以及auto_append指令調用這些函數。這種方法雖然有效,但它無疑為高負載的網站帶來了更多的開銷。關於如何使用這個類的詳細說明,請參見它的源代碼。它的源代碼說明相當完善,作者告訴了你所有你必須知道的事情。

PHP
4.0.4有一個新的輸出緩存句柄ob_gzhandler,它與前面的類相似,但用法不同。使用ob_gzhandler時要在php.ini中加入的內容如下:

output_handler = ob_gzhandler
;

這行代碼使得PHP激活輸出緩存,並壓縮它發送出去的所有內容。如果由於某種原因你不想在php.ini中加上這行代碼,你還可以通過PHP源文件所在目錄的.htaccess文件改變默認的伺服器行為(不壓縮),語法如下:

php_value
output_handler ob_gzhandler

或者是從PHP代碼調用,如下所示:
ob_start("ob_gzhandler");

採用輸出緩存句柄的方法確實非常有效,而且不會給伺服器帶來什麼特殊的負荷。但必須注意的是,Netscape
Communicator對壓縮圖形的支持不佳,因此除非你能夠保證所有用戶都使用IE瀏覽器,否則你應該禁止壓縮JPEG和GIF圖形。一般地,對於所有其他文件,這種壓縮都有效,但建議你針對各種瀏覽器都分別進行測試,特別是當你使用了特殊的插件或者數據查看器時這一點尤其重要。

閱讀提示:PEAR 的緩沖包提供了緩沖動態內容,資料庫查詢和 PHP 函數調用的框架。本文介紹如何採用 PEAR 來緩沖 PHP 程序

採用 PEAR 來緩沖 PHP 程序

PHP 世界中緩沖是一個熱門的話題,因為 PHP 產生的動態頁面,每次用戶請求都需要重新計算,不論請求的結果是否一樣,同時,PHP
每次都會編譯一次腳本。這樣的超負荷運轉對一個流量很高的網站來說肯定難以忍受。幸運的是, Web 的結果可以緩沖,而不需要重新運行和編譯腳本,商品化的產品像
ZendCache 或者開源的 Alternate PHP Cache都提供了把 PHP 腳本編譯為位元組代碼並緩沖的辦法。

PEAR
的緩沖包提供了緩沖動態內容,資料庫查詢和 PHP 函數調用的框架。

就像 Perl 有 CPAN, TeX 有 CTAN,PHP
也有自己的中心資源庫,存放類,庫和模塊。這個庫稱為 PEAR(PHP Extension and Add-On
Repository)。

本文假設你已經安裝了 PEAR 環境,如果沒有的話,可以去 PHP 網站下載。PEAR
的緩沖包包含一個總體的緩沖類和幾個特別的子類。緩沖類使用容器類來存貯和管理緩沖數據。

下面是 PEAR
緩沖當前所包含的容器,以及各自的參數:

file -- file 容器在文件系統存儲了緩沖的數據,是最快的容器。

cache_dir
-- 這是容器存儲文件的目錄。

filename_prefix -- 緩沖文件的前綴,例如:"cache_"。

shm -- shm
容器把緩沖數據放入共享內存,基準測試顯示,目前的實現下,這個容器的速度要比文件容器慢。

shm_key --
共享內存使用的鍵值。

shm_perm -- 使用共享內存數據段的許可權。

shm_size --
分配共享內存的大小。

sem_key -- 信號燈的鍵值。

sem_perm -- 信號燈的許可權。

db --
PEAR 的資料庫抽象層。

dsn -- 資料庫連接的 DSN 。可以參考 PEAR 的 DB 文檔。

cache_table --
表的名字。

phplib -- phplib
容器使用資料庫抽象層存儲緩沖。

db_class

db_file

db_path

local_file

local_path

ext/dbx
-- PHP
的資料庫抽象層擴展,如果像把緩沖存入資料庫,可以採用這個容器。

mole

host

db

username

password

cache_table

persistent

使用
PEAR Cache 所得到的性能提升取決於你所選擇的緩沖容器,例如,把資料庫的結果再次存入資料庫緩沖中就顯得毫無意義。

PEAR Cache
的函數緩沖模塊能把任何函數或者方法的結果緩沖,不論是 PHP
的內置函數還是用戶自定義函數,他預設採用文件容器,把緩沖數據放入到一個叫做function_cache 的目錄。

Cache_Function
類的構造器可以有三個可選的參數:

$container :緩沖容器的名字。

$container_options
:緩沖容器的數組參數。

$expires:緩沖對象過期的時間(秒數)。

普通的函數調用採用 Cache_Function 類的
call() 方法時,就能觸發緩沖。調用 call()
很容易,的一個參數是函數的名字,然後是函數的參數,第二個參數是要調用函數中的第一個,依此類推,我們來看例子:

例1
緩沖函數和方法的調用
// 調用 PEAR Cache 的函數緩沖。

require_once
'Cache/Function.php';

// 定義一些類和函數。

class foo {

function
bar($test) {

echo
"foo::bar($test)

";

}

}

class bar {

function
foobar($object) {

echo
'$'.$object.'->foobar('.$object.')

';

}

}

$bar =
new bar;

function foobar() {

echo 'foobar()';

}

//
取得 Cache_Function 對象

$cache = new Cache_Function();

// 對 foo
類的靜態函數 bar() 作緩沖(foo::bar())。

$cache->call('foo::bar',
'test');

// $bar->foobar()

$cache->call('bar->foobar',
'bar');

$cache->call('foobar');

?>

下面我們採用
Cache_Output 來把輸出作緩沖:

例2 緩沖腳本的輸出

// 載入 PEAR
Cache 的輸出緩沖

require_once 'Cache/Output.php';

$cache = new
Cache_Output('file', array('cache_dir' => '.') );

//
計算要緩沖頁面的標記,我們假定頁面的緩沖取決於

// URL, HTTP GET 和 POST 變數以及
cookies。

$cache_id = $cache->generateID(

array('url' =>
$REQUEST_URI, '

post' => $HTTP_POST_VARS, 'cookies' =>
$HTTP_COOKIE_VARS) );

// 查詢緩沖

if ($content =
$cache->start($cache_id)) {

// 緩沖命中

echo
$content;

die();

}

// 緩沖丟失

// -- 在這里插入內容產生代碼
--

// 把頁面存入緩沖

echo $cache->end();

?>
利用 Cache_Output 類,很容易把一個動態的資料庫驅動的網站應用轉化為靜態,從而極大的提升站點的性能。越來越多的站點在採用 GZIP 壓縮
HTML 內容,這樣減少了伺服器的帶寬消耗,對於使用 Modem 上網的用戶來說也能受益不少。

Cache_OutputCompression
擴展了 Cache_Output 類的功能,他把 GZIP 壓縮的 HTML 內容進行緩沖,從而節省了 CPU 壓縮的時間。

閱讀提示:在本篇文章中,我們將對PHP應用程序的分析、如何改變腳本代碼以及比較優化前後的各種參數值進行簡要的介紹。

PHP應用程序的性能優化

使用PHP編程的最大好處是學習這種編程語言非常容易以及其豐富的庫。即使對需要使用的函數不是十分了解,我們也能夠猜測出如何完成一個特定的任務。

盡管PHP非常簡單易學,但我們仍然需要花費一點時間來學習PHP的一些編程技巧,尤其是與性能和內存佔用相關的技巧。在PHP中,有許多小技巧能夠使我們減少內存的佔用,並提高應用程序的性能。在本篇文章中,我們將對PHP應用程序的分析、如何改變腳本代碼以及比較優化前後的各種參數值進行簡要的介紹。

通過在程序中設置計時的程序,並反復執行這些代碼,我們可以獲得有關程序執行速度的一組數據,這些數據可以可以用來發現程序中的瓶頸,以及如何進行優化,提高應用程序的性能。

也許讀者曾經聽說過PEAR庫吧。我們將使用PEAR庫創建在分析時需要使用的例子,這也是對現有的代碼進行分析的最簡單的方法,它使我們無需使用商用產品就能對代碼進行分析。

我們要使用的庫的名字是PEAR::Benchmark,它對於對代碼進行分析和性能測試非常有用。這個庫提供一個名字為Benchmark_Timer()的類,能夠記錄一個函數調用和下一個函數調用之間的時間。在對代碼的性能進行測試時,我們可以得到一個詳細的腳本執行結果,它非常簡單,如下所示:
include_once("Benchmark/Timer.php");

$bench
= new Benchmark_Timer;

$bench-> start();

$bench->
setMarker('Start of the script');

//
現在處於睡眠狀態幾分鍾

sleep(5);

$bench-> stop();

//
從計時器中獲得分析信息

print_r($bench->
getProfiling());

?>

上面代碼執行後的輸出如下所示:

Array

(

[0] => Array

(

[name] =>
Start

[time] => 1013214253.05751200

[diff] =>
-

[total] => 0

)

[1] =>
Array

(

[name] => Start of the script

[time] =>
1013214253.05761100

[diff] => 9.8943710327148E-05

[total]
=> 9.8943710327148E-05

)

[2] =>
Array

(

[name] => Stop

[time] =>
1013214258.04920700

[diff] => 4.9915959835052

[total] =>
4.9916949272156

)

)

上面的數字似乎是一組雜亂無章的數字,但如果程序的規模更大,這些數字就十分地有用了。

也許廣大讀者也能猜測到,數組的第一個表目是實際調用Benchmark_Timer()類的方法,例如

$bench->
start()、$bench-> setMarker()和$bench->
stop(),與這些表目有關的數字是相當簡單的,現在我們來仔細地研究這些數字:

[0] => Array

(

[name] => Start

[time] => 1013214253.05751200

[diff] => -

[total] => 0

)

time表目指的是何時對Benchmark_Timer()的start()方法調用的UNIX的timestamp,diff表目表示這次調用和上次調用之間的時間間隔,由於這里沒有上一次,因此顯示出了一個破折號,total表目指的是自測試開始到這一特定的調用之前代碼運行的總的時間。下面我們來看看下一個數組的輸出:

[1]
=> Array

(

[name] => Start of the script

[time] => 1013214253.05761100

[diff] =>
9.8943710327148E-05

[total] => 9.8943710327148E-05

)
從上面的數字我們可以看出,在調用$bench->
start()之後,程序運行了9.8943710327148E-05秒(也就是0.0000989秒)後開始調用$bench->
setMarker(....)。

一次真實的性能測試經歷

盡管上面的例子不錯,但在對於決定如何優化你的站點代碼設計方面,它真的不能算是一個好例子。下面我將用我自己作為網站技術人員的一段親身經歷來說明如何解決性能方面存在的問題。

我並不大理解網站使用的代碼,因為它是根據特殊的需求,歷經多年開發而成的━━其中的一個模塊包括網站轉換代碼,另一個模塊記錄網站的使用情況,其他的模塊也各有各的作用。我和網站的主要開發者都意識到網站的代碼需要優化,但又不清楚問題出在哪兒。

為了盡快地完成任務,我開始研究網站的主要腳本代碼,並在全部腳本代碼以及其包含文件中添加了一些$bench->
setMarker()命令,然後分析$bench->
getProfiling()的輸出,並對得到的結果大吃一驚,原來問題出在一個與獲得特定語言名字(例如en代表english)的轉換代碼的函數調用中,該函數在每個頁面上都會被使用數百次。每次調用該函數時,腳本代碼都會對一個MySQL資料庫進行查詢,從一個資料庫表中獲得真正的語言名字。

於是我們這一類的信息創建了一個緩沖系統。經過短短2天時間的工作,我們使系統的性能得到了很大的提高,第一周內頁面的瀏覽量也因此而增加了40%。當然了,這只是一個有關分析代碼能夠提高互聯網應用或互聯網網站性能的例子。

性能測試函數調用

在分析一個腳本或網頁(以及其包含文件)時,盡管Benchmark_Timer()特別有用,但它並不科學,因為要獲得分析的數據我們必須多次載入腳本,而且它也不是針對某個類或函數調用的。

PEAR::Benchmark庫中的另一個被稱作Benchmark_Iterator的類能夠很好地解決這一個問題,它能夠針對特定的函數或類的方法,顯示其分析信息。它的用途是能夠能夠從測試中獲得一致的結果,因為我們知道,如果運行一段腳本一次,其運行時間為10秒,並不意味著它每次的運行時間總是10秒。
In
any case, let's see some examples:

//
連接資料庫的代碼

include_once("DB.php");

$dsn = array(

'phptype'
=> 'mysql',

'hostspec' => 'localhost',

'database'
=> 'database_name',

'username' =>
'user_name',

'password' => 'password'

);

$dbh =
DB::connect($dsn);

function getCreatedDate($id)

{

global
$dbh;

> $stmt = "SELECT created_date FROM users WHERE
id=$id";

// 在這里使用PEAR::DB

$created_date = $dbh->
getOne($stmt);

if ((PEAR::isError($created_date)) ||

(empty($created_date))) {

return false;

} else
{

return $created_date;

}

}

include_once
'Benchmark/Iterate.php';

$bench = new Benchmark_Iterate;

//
運行getDate函數10次

$bench-> run(10, 'getCreatedDate', 1);

//
列印分析信息

print_r($bench-> get());

?> 運行上面的代碼能夠產生與下面相似的結果:

Array

(

[1] => 0.055413007736206

[2] =>
0.0012860298156738

[3] => 0.0010279417037964

[4] =>
0.00093603134155273

[5] => 0.00094103813171387

[6] =>
0.00092899799346924

[7] => 0.0010659694671631

[8] =>
0.00096404552459717

[9] => 0.0010690689086914

[10] =>
0.00093603134155273

[mean] => 0.0064568161964417

[iterations]
=> 10

)
上面的這些數字很好理解,mean條目表示getCreatedDate()函數10次運行的平均時間。在進行實際測試時,應該至少運行1000次,但這個例子得出的結果已經足夠說明問題了。

⑤ php網站如何更新緩存

每個程序使用的緩存,可能都不一樣,你最好找程序作者問一下

PHP 輸出緩存詳解

作者: 字體:[增加 減小] 類型:轉載

Output Control
函數可以讓你自由控制腳本中數據的輸出。它非常地有用,特別是對於:當你想在數據已經輸出後,再輸出文件頭的情況。

輸出控制函數不對使用 header() 或 setcookie(),
發送的文件頭信息產生影響,只對那些類似於 echo() 和 PHP 代碼的數據塊有作用。
我們先舉一個簡單的例子,讓大家對Output
Control有一個大致的印象:
Example 1.

復制代碼
代碼如下:

<?php
ob_start(); //打開緩沖區
echo
\"Hellon\"; //輸出
header(「location:index.php」); //把瀏覽器重定向到index.php

ob_end_flush();//輸出全部內容到瀏覽器
?>

所有對header()函數有了解的人都知道,這個函數會發送一段文件頭給瀏覽器,但是如果在使用這個函數之前已經有了任何輸出(包括空輸出,比如空格,回車和換行)就會提示出錯。如果我們去掉第一行的ob_start(),再執行此程序,我們會發現得到了一條錯誤提示:「Header
had all ready send
by」!但是加上ob_start,就不會提示出錯,原因是當打開了緩沖區,echo後面的字元不會輸出到瀏覽器,而是保留在伺服器,直到你使用
flush或者ob_end_flush才會輸出,所以並不會有任何文件頭輸出的錯誤!
一、 相關函數簡介:

1、Flush:刷新緩沖區的內容,輸出。
函數格式:flush()
說明:這個函數經常使用,效率很高。

2、ob_start :打開輸出緩沖區
函數格式:void ob_start(void)

說明:當緩沖區激活時,所有來自PHP程序的非文件頭信息均不會發送,而是保存在內部緩沖區。為了輸出緩沖區的內容,可以使用ob_end_flush()或flush()輸出緩沖區的內容。

3 、ob_get_contents :返回內部緩沖區的內容。
使用方法:string
ob_get_contents(void)
說明:這個函數會返回當前緩沖區中的內容,如果輸出緩沖區沒有激活,則返回 FALSE 。

4、ob_get_length:返回內部緩沖區的長度。
使用方法:int
ob_get_length(void)
說明:這個函數會返回當前緩沖區中的長度;和ob_get_contents一樣,如果輸出緩沖區沒有激活。則返回
FALSE。
5、ob_end_flush :發送內部緩沖區的內容到瀏覽器,並且關閉輸出緩沖區。

使用方法:void ob_end_flush(void)
說明:這個函數發送輸出緩沖區的內容(如果有的話)。

6、ob_end_clean:刪除內部緩沖區的內容,並且關閉內部緩沖區
使用方法:void
ob_end_clean(void)
說明:這個函數不會輸出內部緩沖區的內容而是把它刪除!

7、ob_implicit_flush:打開或關閉絕對刷新
使用方法:void
ob_implicit_flush ([int flag])

說明:使用過Perl的人都知道$|=x的意義,這個字元串可以打開/關閉緩沖區,而ob_implicit_flush函數也和那個一樣,默認為關閉緩沖區,打開絕對輸出後,每個腳本輸出都直接發送到瀏覽器,不再需要調用
flush()
二、深入了解:
1. 關於Flush函數:

這個函數在PHP3中就出現了,是一個效率很高的函數,他有一個非常有用的功能就是刷新browser的cache.我們舉一個運行效果非常明顯的例子來說明flush.

Example 2.

復制代碼
代碼如下:

<?php
for($i = 1; $i <= 300; $i++
) print(「 「);
// 這一句話非常關鍵,cache的結構使得它的內容只有達到一定的大小才能從瀏覽器里輸出
//
換言之,如果cache的內容不達到一定的大小,它是不會在程序執行完畢前輸出的。經
//
過測試,我發現這個大小的底限是256個字元長。這意味著cache以後接收的內容都會
// 源源不斷的被發送出去。
For($j = 1; $j
<= 20; $j++) {
echo $j.」
」;
flush();
//這一部會使cache新增的內容被擠出去,顯示到瀏覽器上
sleep(1); //讓程序「睡」一秒鍾,會讓你把效果看得更清楚
}

?>

具體效果你可以到這里看看http://www.php2000.com/~uchinaboy/out.php

PHP2000的最新的PHP聊天室就是用的這個技術,可惜的是源代碼未公開 L

註:如果在程序的首部加入ob_implicit_flush()打開絕對刷新,就可以在程序中不再使用flush(),這樣做的好處是:提高效率!

2. 關於ob系列函數:
我想先引用我的好朋友y10k的一個例子:
Example 3.

比如你用得到伺服器和客戶端的設置信息,但是這個信息會因為客戶端的不同而不同,如果想要保存phpinfo()函數的輸出怎麼辦呢?在沒有緩沖區控制之前,可以說一點辦法也沒有,但是有了緩沖區的控制,我們可以輕松的解決:

復制代碼
代碼如下:

<?php
ob_start(); //打開緩沖區

phpinfo(); //使用phpinfo函數
$info=ob_get_contents(); //得到緩沖區的內容並且賦值給$info

$file=fopen(\'info.txt\',\'w\'); //打開文件info.txt
fwrite($file,$info);
//寫入信息到info.txt
fclose($file); //關閉文件info.txt
?>

用以上的方法,就可以把不同用戶的phpinfo信息保存下來,這在以前恐怕沒有辦法辦到!其實上面就是將一些「過程」轉化為「函數」的方法!

或許有人會問:「難道就這個樣子嗎?還有沒有其他用途?」當然有了,比如筆者論壇的PHP
語法加亮顯示就和這個有關(PHP默認的語法加亮顯示函數會直接輸出,不能保存結果,如果在每次調用都顯示恐怕會很浪費CPU,筆者的論壇就把語法加亮函數顯示的結果用控制緩沖區的方法保留了),大家如果感興趣的話可以來看看http://www.zphp.com/bbs/!

可能現在大家對ob_start()的功能有了一定的了解,上面的一個例子看似簡單,但實際上已經掌握了使用ob_start()的要點。

<1>.使用ob_start打開browser的cache,這樣可以保證cache的內容在你調用flush(),ob_end_flush()(或程序執行完畢)之前不會被輸出。

<2>.現在的你應該知道你所擁有的優勢:可以在任何輸出內容後面使用header,setcookie以及session,這是
ob_start一個很大的特點;也可以使用ob_start的參數,在cache被寫入後,然後自動運行命令,比如
ob_start(\"ob_gzhandler\");而我們最常用的做法是用ob_get_contents()得到cache中的內容,然後再進行處理……

<3>.當處理完畢後,我們可以使用各種方法輸出,flush(),ob_end_flush(),以及等到程序執行完畢後的自動輸出。當然,如果你用的是ob_get_contents(),那麼就要你自己控制輸出方式了。

來,讓我們看看能用ob系列函數做些什麼……
一、 靜態模版技術

簡介:所謂靜態模版技術就是通過某種方式,使得用戶在client端得到的是由PHP產生的html頁面。如果這個html頁面不會再被更新,那麼當另外的用戶再次瀏覽此頁面時,程序將不會再調用PHP以及相關的資料庫,對於某些信息量比較大的網站,例如sina,163,sohu。類似這種的技術帶來的好處是非常巨大的。

我所知道的實現靜態輸出的有兩種辦法:
<1>.通過y10k修改的phplib的一個叫template.inc.php類實現。

<2>.使用ob系列函數實現。
對於第一種方法,因為不是這篇文章所要研究的問題,所以不再贅述。

我們現在來看一看第二種方法的具體實現:
Example 4.
<?php
ob_start();//打開緩沖區

?>
php頁面的全部輸出
<?
$content =
ob_get_contents();//取得php頁面輸出的全部內容
$fp = fopen(「output00001.html」, 「w」);
//創建一個文件,並打開,准備寫入
fwrite($fp, $content);
//把php頁面的內容全部寫入output00001.html,然後……
fclose($fp);
?>

這樣,所謂的靜態模版就很容易的被實現了……
二、 捕捉輸出
以上的Example
4.是一種最簡單的情況,你還可以在寫入前對$content進行操作……
你可以設法捕捉一些關鍵字,然後去對它進行再處理,比如Example
3.所述的PHP語法高亮顯示。個人認為,這個功能是此函數最大的精華所在,它可以解決各種各樣的問題,但需要你有足夠的想像力……
Example 5.

<?
Function run_code($code) {
If($code) {
ob_start();

eval($code);
$contents = ob_get_contents();
ob_end_clean();

}else {
echo 「錯誤!沒有輸出」;
exit();
}
return $contents;
}

以上這個例子的用途不是很大,不過很典型$code的本身就是一個含有變數的輸出頁面,而這個例子用eval把$code中的變數替換,然後對輸出結果再進行輸出捕捉,再一次的進行處理……

Example 6. 加快傳輸
<?
/*
** Title.........: PHP4 HTTP
Compression Speeds up the Web
** Version.......: 1.20
** Author........:
catoc <[email protected]>
** Filename......: gzdoc.php
** Last
changed..: 18/10/2000
** Requirments...: PHP4 >= 4.0.1
** PHP was
configured with --with-zlib[=DIR]
** Notes.........: Dynamic Content
Acceleration compresses
** the data transmission data on the fly
** code
by sun jin hu (catoc) <[email protected]>
** Most newer browsers since
1998/1999 have
** been equipped to support the HTTP 1.1
** standard
known as \"content-encoding.\"
** Essentially the browser indicates to the

** server that it can accept \"content encoding\"
** and if the server
is capable it will then
** compress the data and transmit it. The
**
browser decompresses it and then renders
** the page.
**
** Modified
by John Lim ([email protected])
** based on ideas by Sandy McArthur, Jr

** Usage........:
** No space before the beginning of the first
\'<?\' tag.
** ------------Start of file----------
** |<?
** |
include(\'gzdoc.php\');
** |? >
** |<HTML>
** |... the page
...
** |</HTML>
** |<?
** | gzdocout();
** |? >

** -------------End of file-----------
*/
ob_start();

ob_implicit_flush(0);
function CheckCanGzip(){
global
$HTTP_ACCEPT_ENCODING;
if (headers_sent() || connection_timeout() ||
connection_aborted()){
return 0;
}
if (strpos($HTTP_ACCEPT_ENCODING,
\'x-gzip\') !== false) return \"x-gzip\";
if
(strpos($HTTP_ACCEPT_ENCODING,\'gzip\') !== false) return \"gzip\";
return
0;
}
/* $level = compression level 0-9, 0=none, 9=max */
function
GzDocOut($level=1,$debug=0){
$ENCODING = CheckCanGzip();
if ($ENCODING){

print \"n<!-- Use compress $ENCODING -->n\";
$Contents =
ob_get_contents();
ob_end_clean();
if ($debug){
$s = \"<p>Not
compress length: \".strlen($Contents);
$s .= \"
Compressed length:
\".strlen(gzcompress($Contents,$level));
$Contents .= $s;
}

header(\"Content-Encoding: $ENCODING\");
print
\"x1fx8bx08x00x00x00x00x00\";
$Size = strlen($Contents);
$Crc =
crc32($Contents);
$Contents = gzcompress($Contents,$level);
$Contents =
substr($Contents, 0, strlen($Contents) - 4);
print $Contents;
print
pack(\'V\',$Crc);
print pack(\'V\',$Size);
exit;
}else{

ob_end_flush();
exit;
}
}
?>

這是catoc的一段很早以前的代碼,是在weblogs.com看到的,他利用了zlib的函數,對傳輸的內容進行了壓縮,測試表明,對於10k以上的頁面,會產生效果,而且頁面越大,效果越明顯……

⑥ 如何正確實現PHP網站優化

1、使用GZip

在每一個PHP頁面頂部加入以下代碼:

<?php ob_start("ob_gzhandler");?>

使用該代碼後伺服器會壓縮所有需要傳送到客戶端的代碼,並在瀏覽器中進行解壓,從而使網站運行速度加快。這一功能還可以節省網站空間的流量。

2、不要濫用Javascript和Ajax

只在需要的時候才使用Javascript和Ajax,千萬不要濫用它們。有些網站使用了太多不必要的Ajax動畫,或使用Ajax來載入無用的部分。這樣一來Javascript文件就會變得很大,而實際上卻有很多其他方案來實現這些功能。

3、圖片、頭文件和HTTP請求

網頁所引用的圖片、外部文件以及CSS樣式文件越多,網頁就載入得越慢。花些時間把圖片文件和其他外部文件縮小一些吧,使它們能更快地被載入。此外,每一次載入圖片和外部文件時都會產生一個HTTP請求,這一定會拖延載入時間。

4、限制MySQL查詢次數

對資料庫的每一次請求都會使網頁的載入速度減緩一些。網路開發者允許很難控制這一點,但是在一些細節的地方是可以進行優化的。比如,在選擇資料庫記錄時,不要使用以下代碼:

SELECT * FROM database

而是使用:

SELECT id, name, date, author, etc, blah, blah FROM database
這會消耗更少的查詢時間並減少伺服器的負載。

5、.php擴展名

有些人認為將JS文件保存為filename.js.php以及將CSS文件保存為stylesheet.css.php會讓載入的時間減少些,但我並沒有察覺到這其中的差別。當然,如果你網站的速度變得很慢,你可以試試這個方法。當然,你需要在每個PHP文件中用include()去載入這些文件。

⑦ PHP里的output_buffering 怎麼開啟

在PHP.INI可以設置以下與輸出緩沖有關的:
名稱 默認值 作用范圍 修正記錄
output_buffering "0" PHP_INI_PERDIR
output_handler NULL PHP_INI_PERDIR 自 PHP 4.0.4 起可用
implicit_flush "0" PHP_INI_ALL 在 PHP <= 4.2.3 版本中是 PHP_INI_PERDIR

簡單解釋如下:
output_buffering boolean/integer
該選項設置為 On 時,將在所有的腳本中使用輸出控制。如果要限制輸出緩沖區的最大值,可將該選項設定為指定的最大位元組數(例如 output_buffering=4096)。從PHP 4.3.5 版開始,該選項在 PHP-CLI 下總是為 Off。

output_handler string
該選項可將腳本所有的輸出,重定向到一個函數。例如,將 output_handler 設置為 mb_output_handler() 時,字元的編碼將被修改為指定的編碼。設置的任何處理函數,將自動的處理輸出緩沖。

注意: 不能同時使用 mb_output_handler() 和 ob_iconv_handler(),也不能同時使用 ob_gzhandler() 和 zlib.output_compression。

注意: 只有內置函數可以使用此指令。對於用戶定義的函數,使用 ob_start()。

implicit_flush boolean
默認為 FALSE。如將該選項改為 TRUE,PHP 將使輸出層,在每段信息塊輸出後,自動刷新。這等同於在每次使用 print()、echo() 等函數或每個 HTML 塊之後,調用 PHP 中的 flush() 函數。

不在web環境中使用 PHP 時,打開這個選項對程序執行的性能有嚴重的影響,通常只推薦在調試時使用。在 CLI SAPI 的執行模式下,該標記默認為 TRUE。

參見 ob_implicit_flush()。

設置了肯定會有用的,除非你修改的PHP.INI位置不是系統使用的那個,比如一般是C::\WINDOWS\PHP.INI,當然可以設置到其它地方。另外控制台程序是不緩沖的。

另外,你還可以在程序裡面控制輸出緩沖,請參考手冊裡面的「CXIV. Output Control 輸出控制函數」那一章,主要有如下函數:

flush -- 刷新輸出緩沖
ob_clean -- Clean (erase) the output buffer
ob_end_clean -- Clean (erase) the output buffer and turn off output buffering
ob_end_flush -- Flush (send) the output buffer and turn off output buffering
ob_flush -- Flush (send) the output buffer
ob_get_clean -- Get current buffer contents and delete current output buffer
ob_get_contents -- Return the contents of the output buffer
ob_get_flush -- Flush the output buffer, return it as a string and turn off output buffering
ob_get_length -- Return the length of the output buffer
ob_get_level -- Return the nesting level of the output buffering mechanism
ob_get_status -- Get status of output buffers
ob_gzhandler -- ob_start callback function to gzip output buffer
ob_implicit_flush -- Turn implicit flush on/off
ob_list_handlers -- List all output handlers in use
ob_start -- Turn on output buffering
output_add_rewrite_var -- Add URL rewriter values
output_reset_rewrite_vars -- Reset URL rewriter values

例子程序:

<?php

ob_start();
echo "Hello\n";

setcookie("cookiename", "cookiedata");

ob_end_flush();

?>

⑧ php框架中的初始文件一般會判斷用ob_start('ob_gzhandler')還是ob_start(),那ob_end_clean在哪裡呢

ob_start() 是啟用內部緩沖區,將要輸出的內容存儲在內部緩沖區中,可以使用 ob_end_flush() 函數,在請求結束之際才會輸出緩沖區內容到瀏覽器。
使用 ob_end_clean() 函數會靜默丟棄掉緩沖區的內容
一般情況下如果使用了輸出語句如 echo/print 等函數後數據就會輸出到瀏覽器,那麼執行 header() 或 setcookie()就會報錯,啟用 ob_start() 就是將數據臨時存儲在緩沖區,這樣再執行執行 header() 或 setcookie()就不會報錯。
ob_start('ob_gzhandler') 是啟用緩存並啟用 GZIP 壓縮功能,這樣輸出到瀏覽器的數據流會更小

⑨ php問題@ob_start("ob_gzhandler");

千言萬語。
建議搜索函數名,你將看到更詳細的資料。
你可以在手冊里搜,也可以在搜索引擎搜。
搜:
1.ob_start(看下方的鏈接)
2.ob_gzhandler(看下方的鏈接)
3.microtime

我搜到的一些,希望對你有所幫助。
http://hi..com/%B4%F3%CE%C3%D7%D3%D1%A7php/blog/item/84a4ce8d477f75e4f01f36d7.html

⑩ 如何用PHP實現頁面的GZIP壓縮輸出

第一步,你需要對php的設置如下:
php.ini: output_buffering = Off output_handler = ob_gzhandler zlib.output_compression = Off zlib.output_compression_level = -1

第二步,你需要在apache下增加如下設置:

AddOutputFilter DEFLATE html php js css

這樣就可以對html php js css進行gzip壓縮了。

第三步,你需要使用如下php壓縮html並輸出到客戶端的函數:

function compress_html($string) { return ltrim(rtrim(preg_replace(array("/> *([^ ]*) *</","//","'/\*[^*]*\*/'","/\r\n/","/\n/","/\t/",'/>[ ]+</'), array(">\\1<",'','','','','','><'),$string))); }

上面的這個正則表達式,很強大的哦,經過我本人親自測試可使用。
通過以上方法,你就可以將你的html代碼壓縮然後輸出給客戶端了。不信你可以查看源代碼,就是一行,網頁瞬間壓縮很小。

閱讀全文

與phpobgzhandler相關的資料

熱點內容
c51單片機特殊寄存器的原理 瀏覽:576
閃耀永恆特利加密鑰 瀏覽:758
如何誇程序員 瀏覽:776
天津期貨python招聘 瀏覽:263
單片機機器語言寫的程序 瀏覽:548
韓國直播軟體app叫什麼名 瀏覽:916
軍營訓練不聽教官的命令 瀏覽:259
v開頭的音樂播放器是什麼APP 瀏覽:117
單片機是怎麼做出來的 瀏覽:315
博圖怎麼作為opc伺服器 瀏覽:100
編譯做題軟體 瀏覽:293
橋梁檢測pdf 瀏覽:685
化解壓力的一種方法 瀏覽:680
路由器和DSN伺服器有什麼區別 瀏覽:549
android伸縮控制項 瀏覽:853
androidm3u8緩存 瀏覽:236
imphp開源知乎 瀏覽:708
清除網路通配符dos命令 瀏覽:839
鴻蒙系統怎麼快速換回安卓 瀏覽:714
pdf綠色虛擬列印機 瀏覽:215