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:
Nội dung của file zlib.php như sau
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();
?>
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($Contents, 0, strlen($Contents) - 4);
print $Contents;
print pack('V',$Crc);
print pack('V',$Size);
exit;
}else{
ob_end_flush();
exit;
}
}
Bài liên quan
ob_start("ob_gzhandler");
?>
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
Thế guestbuk đã fix lại chưa ? anti-flood và html tag đó