Maison  >  Article  >  développement back-end  >  PHP utilise l'extension zlib pour implémenter la sortie compressée GZIP

PHP utilise l'extension zlib pour implémenter la sortie compressée GZIP

不言
不言original
2018-04-10 09:12:362104parcourir

Cet article présente principalement la méthode PHP utilisant l'extension zlib pour obtenir une sortie de compression GZIP. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer

Cet article décrit l'exemple de PHP utilisant l'extension zlib. pour implémenter la méthode de compression GZIP. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

Généralement, lorsque nous avons une grande quantité de données à transmettre et que nous espérons réduire la pression de la bande passante sur le serveur, nous adopterons une méthode pour compresser le transmission de fichiers. L'utilisation de zlib en PHP peut également implémenter la sortie compressée gzip, examinons un résumé des différentes méthodes de sortie compressée GZIP

GZIP (GNU-ZIP) est une technologie de compression. Après la compression GZIP, la taille de la page peut être réduite à 30 % ou même plus petite que la taille d'origine. De cette façon, les utilisateurs se sentiront rafraîchis et heureux lors de leur navigation !

Préparation

1. Vous ne trouvez pas le fichier php_zlib.dll ?

La compression Zlib est intégrée à PHP depuis php4.3, donc au moins dans l'environnement Windows, il n'est pas nécessaire d'installer zlib.

2. Installez et construisez l'environnement d'exploitation php

Comme il ne suffit pas d'activer la configuration gzip via le fichier de configuration php.ini pour obtenir une sortie de compression php gzip, cela nécessite la prise en charge d'Apache. , il est donc recommandé d'installer et de créer l'environnement d'exploitation php + apache + mysql.

Étapes de configuration de php gzip

1 Ouvrez le fichier de configuration php.ini et recherchez zlib.output_compression = Off. , Remplacez


zlib.output_compression = Off
;zlib.output_compression_level = -1


par


zlib.output_compression = On
zlib.output_compression_level = 6


Exemple 1

PHP utilise l'extension zlib pour implémenter la sortie de compression GZIP de la page

Code


function ob_gzip($content) // $content 就是要压缩的页面内容
{
if(!headers_sent() && extension_loaded("zlib") && strstr($_SERVER["HTTP_ACCEPT_ENCODING"],"gzip"))//判断页面头部信息是否输出,PHP中zlib扩 展是否已经加载,浏览器是否支持GZIP技术
{
$content = gzencode($content." n//此页已压缩",9); //为准备压缩的内容贴上"//此页已压缩"的注释标签,然后用zlib提供的gzencode()函数执行级别为9的压缩,这个参数值范围是0-9,0 表示无压缩,9表示最大压缩,当然压缩程度越高越费CPU。
//用header()函数给浏览器发送一些头部信息,告诉浏览器这个页面已经用GZIP压缩过了!
header("Content-Encoding: gzip");
header("Vary: Accept-Encoding");
header("Content-Length: ".strlen($content));
}
return $content; //返回压缩的内容


Une fois la fonction écrite, appelez-la avec ob_start, pour que le ob_start() original devienne


Copier le codeLe code est le suivant :

ob_start('ob_gzip'); //给ob_start()加一个参数,参数名就是刚才的函数名。这样当内容进入缓冲区后PHP就会调用ob_gzip函数把它压缩了。

Tampon de fin final


Copier le codeLe code est comme suit :

ob_end_flush(); //结束缓冲区,输出内容。当然,不用这个函数也行,因为程序执行到最后会自动将缓冲区内容输出。

Exemple complet final

<?php
//调用一个函数名为ob_gzip的内容进行压缩
ob_start(&#39;ob_gzip&#39;);
//输出内容
ob_end_flush();
//这是ob_gzip函数
function ob_gzip($content)
{
if(!headers_sent()&&extension_loaded("zlib")
&&strstr($_SERVER["HTTP_ACCEPT_ENCODING"],"gzip"))
{
$content = gzencode($content." n//此页已压缩",9);
header("Content-Encoding: gzip");
header("Vary: Accept-Encoding");
header("Content-Length: ".strlen($content));
}
return $content;
}
?>


Exemple 2

Code de compression et de décompression zlib pour le fichier swf

Exemple de fichier :


//没有加入判断swf文件是否已经压缩,入需要可以根据文件的第一个字节是&#39;F&#39;或者&#39;C&#39;来判断
压缩swf文件:
//--------------------------------------------------------------------------------------------------
//文件名
$filename = "test.swf";
//打开文件
$rs = fopen($filename,"r");
//读取文件的数据
$str = fread($rs,filesize($filename));
//设置swf头文件
$head = substr($str,1,8);
$head = "C".$head;
//获取swf文件内容
$body = substr($str,8);
//压缩文件内容,使用最高压缩级别9
$body = gzcompress($body, 9);
//合并文件头和内容
$str = $head.$body;
//关闭读取的文件流
fclose($rs);
//创建一个新的文件
$ws = fopen("create.swf","w");
//写文件
fwrite($ws,$str);
//关闭文件留
fclose($ws);
//----------------------------------------------------------------------------------------------------
?>


Décompresser le fichier swf :


//----------------------------------------------------------------------------------------------------
//文件名
$filename = "test.swf";
//打开文件
$rs = fopen($filename,"r");
//读取文件的数据
$str = fread($rs,filesize($filename));
//设置swf头文件
$head = substr($str,1,8);
$head = "F".$head;
//获取swf文件内容
$body = substr($str,8);
//解压缩文件内容
$body = gzuncompress($body);
//合并文件头和内容
$str = $head.$body;
//关闭读取的文件流
fclose($rs);
//创建一个新的文件
$ws = fopen("create.swf","w");
//写文件
fwrite($ws,$str);
//关闭文件留
fclose($ws);
//----------------------------------------------------------------------------------------------------
?>


Exemple 3

Activer la sortie compressée php zlib (gzip)

Points de connaissance de la configuration de php gzip :

1 Par défaut, php n'active pas la sortie de compression de l'ensemble du site zlib, mais utilise la fonction ob_gzhandler pour les pages qui nécessitent une compression. sortie. Deux Vous ne pouvez choisir qu'un seul des deux, sinon une erreur sera signalée.

2, zlib.output_compressionLa valeur par défaut est Off, vous pouvez la définir sur On, ou sur la taille du tampon de sortie (la valeur par défaut est 4k)

3, zlib.output_compression_level représente le taux de compression. La valeur du taux de compression recommandée par défaut est de 6. La plage facultative est de 1 à 9. -1 représente la désactivation de la compression php zlib (gzip)

2. Enregistrez le php. .ini et redémarrez le serveur Apache

3. Ouvrez le fichier de configuration Apache httpd.conf, configurez et chargez deflate_module

Cette étape est l'étape la plus critique pour activer la configuration de la sortie de la compression php gzip. De nombreux internautes diront que même si j'ai activé la configuration php gzip dans le fichier de configuration php.ini, je ne réalise toujours pas la compression php gzip. C'est parce qu'Apache n'est pas autorisé à charger <.>deflate_module. La méthode est la suivante, remplacez


#LoadModule deflate_module modules/mod_deflate.so


Supprimez le signe # au début et redémarrez apache.

Recommandations associées :

PHP utilise Nginx pour implémenter le proxy inverse

PHP utilise Redis sous le système Windows



Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn