


Explication détaillée des techniques de mise en cache et de compression des pages dynamiques en PHP
mod_gzip est un module Apache dont la fonction est d'utiliser Gzip pour compresser des pages html statiques. Les navigateurs qui suivent le standard IETF peuvent accepter l'encodage gzip (IE, Netscape, etc.). mod_gzip peut augmenter le temps de téléchargement d'une page de 4 à 5 fois. Je vous recommande fortement d'utiliser mod_gzip sur votre serveur Web. Cependant, nous avons également dû construire notre propre moteur de compression en PHP. Dans cet article, je vais vous présenter comment utiliser la fonction de contrôle de sortie de PHP pour accélérer considérablement la vitesse de chargement des pages.
Présentation des fonctions de contrôle de sortie de PHP
La chose la plus satisfaisante à propos de PHP4 est que vous pouvez laisser PHP mettre en cache toutes les sorties générées par le script avant de décider de les envoyer. Auparavant, le le navigateur ne recevrait aucun contenu. Dans un script, vous pouvez utiliser ces fonctions pour définir des en-têtes et des cookies, mais cela ne représente qu'une petite partie des puissantes fonctions de sortie.
<?php void ob_start(void); ?>
indique au processeur PHP de rediriger toutes les sorties vers un tampon interne. Aucune sortie ne sera envoyée au navigateur tant que ob_start ne sera pas appelé.
<?php string ob_get_contents(void); ?>
Cette fonction renvoie le "tampon de sortie" sous forme de chaîne. Vous pouvez appeler cette fonction pour envoyer la sortie accumulée au navigateur. (Seulement après avoir désactivé la fonction de mise en mémoire tampon !!)
<?php int ob_get_length(void); ?>
Renvoie la longueur de la chaîne dans le cache.
<?php void ob_end_clean(void); ?>
Videz le cache de sortie et désactivez le cache de sortie. Cette fonction doit être utilisée avant que le contenu du cache ne soit envoyé au navigateur.
void 501([int flag])
Utilisé pour activer/désactiver le commutateur d'action de chasse implicite (la valeur par défaut est désactivée). Si flush est activé, chaque fois que print/echo ou d'autres commandes de sortie sont appelées, le contenu de sortie sera immédiatement envoyé au navigateur.
Utilisez les contrôles de sortie pour compresser la sortie PHP
Vous devez utiliser le package d'extension Zlib compilé en PHP4 pour compresser la sortie. Si nécessaire, vous pouvez consulter les instructions d'installation du package Zlib dans la documentation PHP.
Tout d'abord, initialisez le cache de sortie :
<?php ob_start(); ob_implicit_flush(0); ?>
Après cela, utilisez print, echo ou d'autres méthodes que vous aimez pour générer tout le contenu de sortie, par exemple :
<?php print("Hey this is a compressed output!"); ?>
Une fois la page générée, nous récupérons le contenu de sortie :
<?php $contents = ob_get_contents(); ob_end_clean(); ?>
Après cela, nous devons détecter si le navigateur prend en charge les données compressées. S'il est pris en charge, le navigateur enverra un en-tête HTTP ACCEPT-ENCODEING au serveur. Il suffit de vérifier s'il y a une chaîne "gzip,deflate" dans la variable $HTTP_ACCEPT_ENCODING.
<?php if(ereg('gzip, deflate',$HTTP_ACCEPT_ENCODING)) { // 在这里生成 Gzip 压缩的内容 } else { echo $contents; } ?>
Cette méthode est simple à utiliser et clairement structurée. Voyons comment générer une sortie compressée :
<?php //告诉浏览器将要收到的是gzip数据 //当然在此之前,你已经检查了它们是否支持gzip,x-gzip数据格式 //如果支持的是x-gzip,那么下面的头就要用z-gzip来代替 header("Content-Encoding: gzip"); //显示gzip文件的头 //只需显示一次 echo "x1fx8bx08x00x00x00x00x00"; //计算出文件的大小和CRC码 $Size = strlen($contents); $Crc = crc32($contents); //压缩数据 $contents = gzcompress($contents, 9); //我们不能就这样输出,因为CRC码是混乱的。 //如果我在这里使用“echo $contents”,压缩的数据会被送出, //但是却不完整。文件最后的四个字节是CRC校验码,可是只发出去了三个字节。 //最后一个字节被丢掉了。我不知道这个bug在4.0.2版中解决了没有, //不过最好避免错误的方法是把正确的CRC校验码加到压缩的数据的末尾。 // //把旧的CRC校验码剥离 $contents = substr($contents, 0, strlen($contents) - 4); //仅显示压缩的数据 echo $contents; //输出CRC,和原来数据的大小(字节) gzip_PrintFourChars($Crc); gzip_PrintFourChars($Size); function gzip_PrintFourChars($Val) { for ($i = 0; $i <4; $i ++) { echo chr($Val % 256); $Val = floor($Val / 256); } } ?> //好了,你还可以按此方式附加上更多的压缩数据。
Pour les tests réels, tout le code du script est le suivant :
<?php ob_start(); ob_implicit_flush(0); print("I'm compressed!n"); $contents = ob_get_contents(); ob_end_clean(); header("Content-Encoding: gzip"); echo "x1fx8bx08x00x00x00x00x00"; $Size = strlen($contents); $Crc = crc32($contents); $contents = gzcompress($contents, 9); $contents = substr($contents, 0, strlen($contents) - 4); echo $contents; gzip_PrintFourChars($Crc); gzip_PrintFourChars($Size); function gzip_PrintFourChars($Val) { for ($i = 0; $i <4; $i ++) { echo chr($Val % 256); $Val = floor($Val / 256); } } ?>
Cache la sortie PHP
Quand PHP4 avait pas encore sorti et je devais utiliser PHP3, j'étais très intéressé par le développement de mécanismes de mise en cache pour réduire le chargement de la base de données et l'accès au système de fichiers . Il n’existe pas de méthode particulièrement efficace en PHP3, mais avec la mise en cache de sortie, tout devient beaucoup plus simple en PHP4.
Voici un exemple simple :
<?php //为请求的URI构造一个文件名 $cached_file=md5($REQUEST_URI); if((!file_exists("/cache/$cached_file"))||(!is_valid("/cache/$cached_file"))) { //is_valid函数验证缓存,你可以用这个函数检查Cache是否过期或其他特定的条件。 //如果文件不在Cache中或者不可用则生成输出 ob_start(); ob_implicit_flush(0); //在此输出…… $contents = ob_get_contents(); ob_end_clean(); $fil=fopen($cached_file,"w+"); fwrite($fil,$contents,$strlen($contents)); fclose($fil); } /如果请求的文件在缓存中且可用,则: readfile($cached_file); ?>
Ceci est un exemple simple, en utilisant la mise en cache de sortie, vous pouvez créer un système de génération de contenu complexe en utilisant différents caches pour différents morceaux ou programmes, mécanismes, etc...
Conclusion
Les fonctions de contrôle de sortie PHP sont très utiles pour rediriger la sortie générée par les scripts vers le cache. La sortie des données de cache remplacées pour les navigateurs prenant en charge gzip peut réduire les temps de chargement. Il peut également être utilisé comme mécanisme de mise en cache pour réduire l'accès aux sources de données (bases de données ou fichiers), ce qui est très important lors de l'utilisation de XML.
Si nous construisons un moteur en PHP, mettons en cache les données des sources de données (documents XML et bases de données) et générons dynamiquement du contenu au format XML (sans présentation-apparence), nous pouvons obtenir la sortie de ces XML et utiliser XSLT Convert en n'importe quel format souhaité (html, wap, palm, pdf, etc.). Cette tâche peut être bien accomplie en utilisant la mise en cache de sortie de PHP4 et l'extension Sablotron XSLT.
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

Si vous êtes un développeur PHP expérimenté, vous aurez peut-être le sentiment d'y être déjà allé et de l'avoir déjà fait. Vous avez développé un nombre important d'applications, débogué des millions de lignes de code et peaufiné de nombreux scripts pour réaliser des opérations.

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Liaison statique (statique: :) implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Quelles sont les méthodes magiques de PHP? Les méthodes magiques de PHP incluent: 1. \ _ \ _ Construct, utilisé pour initialiser les objets; 2. \ _ \ _ Destruct, utilisé pour nettoyer les ressources; 3. \ _ \ _ Appel, gérer les appels de méthode inexistants; 4. \ _ \ _ GET, Implémentez l'accès à l'attribut dynamique; 5. \ _ \ _ SET, Implémentez les paramètres d'attribut dynamique. Ces méthodes sont automatiquement appelées dans certaines situations, améliorant la flexibilité et l'efficacité du code.
