Maison  >  Article  >  développement back-end  >  Explication détaillée de la façon dont PHP utilise l'extension zlib pour implémenter la sortie compressée GZIP

Explication détaillée de la façon dont PHP utilise l'extension zlib pour implémenter la sortie compressée GZIP

jacklove
jackloveoriginal
2018-06-27 18:00:572118parcourir

Cet article présente principalement la méthode PHP utilisant l'extension zlib pour obtenir une sortie de compression GZIP. Il analyse en détail les compétences opérationnelles liées à la configuration PHP gzip et à la sortie de compression sous forme d'exemples. Les amis dans le besoin peuvent se référer à cet article. 🎜>

L'exemple décrit comment PHP utilise l'extension zlib pour implémenter la sortie compressée 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 %, voire 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; //返回压缩的内容

Après la fonction est écrit , appelez-le simplement avec ob_start, donc l'original

devient ob_start()


Copiez le code Le code est le suivant :

ob_start(' ob_gzip'); //Ajoutez un paramètre à ob_start(), et le nom du paramètre est le nom de la fonction à l'instant. De cette façon, lorsque le contenu entre dans le tampon, PHP appellera la fonction ob_gzip pour le compresser.

Enfin terminer le tampon


Copier le code Le code est le suivant :

ob_end_flush( //); Zone tampon de fin, contenu de sortie. Bien entendu, vous n'avez pas besoin de cette fonction, car le contenu du tampon sera automatiquement affiché à la fin de l'exécution du programme.

Le dernier exemple complet

<?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

zlib compresse et décompresse swf Code du fichier

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 php gzip :

1. Par défaut, PHP n'active pas la sortie de compression zlib sur l'ensemble du site, mais utilise la fonction

sur les pages qui nécessitent une sortie compressée. Vous ne pouvez choisir que l'une des deux, sinon une erreur sera signalée. . ob_gzhandler

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.

Articles qui pourraient vous intéresser :

Explication détaillée de la façon dont PHP implémente le cache mémoire distribué pour configurer la synchronisation des sessions de cluster Web


Un exemple d'explication de la fonction de découpe et de fusion de fichiers volumineux implémentée par PHP


Un exemple d'explication de l'algorithme de regroupement de mots simple implémenté par PHP


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