09/10/2018, 17:40

[TUTOR] Nén trang web để tiết kiệm băng thông trong PHP

Đối với nhiều web-site vừa và nhỏ thì vấn đề băng thông luôn là vấn đề đau đầu , nếu băng thông dành cho website của bạn vượt quá giới hạn cho phép thì nhà cung cấp sẽ ngưng tạm thời website của bạn ở đây mình xin giới thiệu số hàm để nén trang web sử dụng thư viện hàm ZLIB có sẵn trong thư mục extensions trong thư mục cài PHP của mình ( vd : c:phpextensions . Bạn cần phải sửa file php.ini bằng cách xóa dấu ; trước tên file DLL của thư viện hàm ZLIB rồi restart lại Apache thì mới sử dụng được . Còn nếu bạn sử dụng các hosting có trả $$$ thì họ đã hỗ trợ sẵn rùi . Những PHP forum như VBulletin , PHPBB hay Invision Board đều sữ dụng thư viện hàm ZLIB này , ở đây mình giới thiệu cách đơn giản nhất

Cách dùng : Ở đầu mỗi trang PHP , sau dấu <?php , bạn làm như sau:

PHP Code:
<?php
include('zlib.php');
// Mã PHP của bạn phải bắt buộc nằm trong khoảng này !!!
gzdocout(); 
?>
Nội dung của file zlib.php như sau
PHP Code:
ob_start(); 
ob_implicit_flush(0); 
function 
CheckCanGzip(){ 
    global 
$HTTP_ACCEPT_ENCODING;
    
// CHU Y : Kể từ PHP4.0.1 , hàm connection_timeout() không còn được hỗ trợ , do vậy bạn chỉ cần xóa cụm "connection_timeout() ||" đi   
    
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

// Mặc định sử dụng chế độ nén thấp nhất là 1 , nếu bạn muốn sử dụng chế độ nén cao nhất , hãy sửa $level=1 thành $level=9
function GzDocOut($level=1){ 
    
$ENCODING CheckCanGzip(); 
    if (
$ENCODING){ 
        print 
" <!-- Da nen trang web bang co che $ENCODING "
        
$Contents ob_get_contents(); 
        
ob_end_clean(); 
        
$s "<p>Kich thuoc khi chua nen: ".strlen($Contents); 
        
$s .= "<br>Kick thuoc da nen: ".strlen(gzcompress($Contents,$level));
        
$s .= "--> ";
        
$Contents .= $s
        
        
header("Content-Encoding: $ENCODING");      
        print 
"x1fx8bx08x00x00x00x00x00"
        
$Size strlen($Contents); 
        
$Crc crc32($Contents); 
        
$Contents gzcompress($Contents,$level); 
        
$Contents substr($Contents0strlen($Contents) - 4); 
        print 
$Contents
        print 
pack('V',$Crc); 
        print 
pack('V',$Size); 
        exit; 
    }else{ 
        
ob_end_flush(); 
        exit; 
    } 

Deathly Smile viết 19:52 ngày 09/10/2018
zài thế ?
Code:
$phpversion_array = phpversion();
$phpversion_nr = $phpversion_array[0].".".$phpversion_array[2].$phpversion_array[4];
if (extension_loaded("zlib") && ($phpversion_nr >= 4.04)) {
    ob_start("ob_gzhandler");
}
bab3vil viết 19:46 ngày 09/10/2018
vẫn còn dài . <?
ob_start("ob_gzhandler");
?>
bab3vil viết 19:43 ngày 09/10/2018
để tham khảo thêm thì bạn có thể lên các site sau :
Articles
|- PHPBuilder.com - speed: http://www.phpbuilder.com/columns/pi...21.php3?page=3
|- PHPBuilder.com - gzip html compression: http://www.phpbuilder.com/mail/php-g...00062/0670.php

Scripts
|- PHP.ResourceIndex.com - various: http://php.resourceindex.com/Functio...nd_Encryption/
|- Leknor.com - class.gzip_encode: http://leknor.com/code/php/view/clas...encode.php.txt
|- PHP.Weblogs.com - http_compression: http://php.weblogs.com/http_compression
|- Hotscripts.com - Various: http://www.hotscripts.com/PHP/Script...s_and_Classes/
|- Hotscripts.com - Various: http://www.hotscripts.com/PHP/Script...e_Enhancement/

Programs
|- gzip Homepage: http://www.gzip.org/
|- zlib Homepage: http://www.gzip.org/zlib/
|- Win-GZ: http://home.hiwaay.net/~crispen/src/#wingz

Other
|- PHP.net - manual - ob_gzhandler: http://www.php.net/manual/en/function.ob-gzhandler.php
|- Google Search: http://www.google.co.uk/search?q=php...&start=10&sa=N
Deathly Smile viết 19:44 ngày 09/10/2018
Bab3vil viết thế là ko hiểu rồi. Căn bản bây giờ host toàn PHP mới nhứt nên ko cần check PHP ver thôi
Thế guestbuk đã fix lại chưa ? anti-flood và html tag đó
Bài liên quan
0