Maison > Article > développement back-end > Analysez comment PHP utilise le mécanisme de cache ob pour implémenter des solutions statiques de page
La conversion préalable de la page d'exécution PHP en HTML est l'une des méthodes dites statiques PHP.
D'autres méthodes incluent le remplacement de modèle, l'opcache et d'autres méthodes.
Le rôle de la staticisation :
Améliorer la vitesse de réponse du site Web et réduire la charge du serveur ;
Pour le référencement des moteurs de recherche
Utiliser le tampon de sortie PHP pour directement ; écrire du HTML, chronométrer L'analyse régulière du site Web en arrière-plan est un moyen relativement simple d'obtenir des pages Web statiques.
Avant statique :
for($i=0;$i<1000;$i++){
echo "bull
";
}
?>
Statique :
ob_start();
for($i=0;$i<1000;$i++){
echo "bull< ;br> ;";
}
$str = ob_get_contents();
ob_end_clean();
$fp = fopen("test.html ", "w");
fwrite($fp,$str);
fclose($fp);
echo "
?>
Ce code préformera un test.html. Pour parler franchement, il utilise en fait de l'espace en échange pour Time, comme pour les sites d'information, le contenu publié ne changera fondamentalement pas une fois écrit, il est donc plus approprié de le convertir statiquement en HTML.
Lorsque les utilisateurs visitent, il leur suffit de se diriger vers cette page html.
Introduisez d'abord plusieurs fonctions courantes couramment utilisées dans le cache ob dans php
ob_start() : mécanisme de cache ouvert
ob_get_contents() : Récupère le contenu dans le cache ob
ob_clean() efface le contenu dans le cache ob, mais ne ferme pas le cache
ob_end_clean() clear le contenu du cache ob dans le contenu et fermez le cache
ob_flush Videz le cache, affichez le contenu, mais ne fermez pas le cache
ob_end_flush Videz le cache, affichez le contenu et fermez le cache
flush force l'actualisation de la sortie Contenu dans le cache
Selon les dispositions du protocole http, le contenu de la réponse ne peut pas être affiché avant l'en-tête de réponse. Par conséquent, s'il y en a. sortie de contenu devant la fonction header(), une erreur se produira, mais après avoir utilisé ob_start(), le contenu de la réponse sera d'abord placé dans le cache ob et ne sera pas envoyé avant l'envoi de l'en-tête du message. Cela résout le problème de. rapport d'erreur header() !
Parlons de la façon d'utiliser le propre mécanisme de cache ob de PHP pour réaliser la statique de page
1 <?php 2 3 $id=$_REQUEST['id']; 4 5 //判断缓存文件是否存在,如果存在,直接输出 6 if(file_exists('content'.$id.'.html')){ 7 echo file_get_contents('content'.$id.'.html'); 8 return; 9 }10 11 //开启缓存机制12 ob_start();13 14 //到数据库中查询所需要的内容15 $conn=mysql_connect("localhost","root","root");16 mysql_select('db');17 mysql_query('set names utf8');18 19 $sql="select content from table_name where id=$id";20 $res=mysql_query($sql);21 $row=mysql_fetch_assoc($res);22 $content=$row[0];23 24 mysql_free_result($res);25 mysql_close($conn);26 echo $content;27 //将输出的内容保存到文件中,形成静态页面,在下次访问的时候,直接读取输出28 file_put_contents('content'.$id.'.html',ob_get_contents());29 30 31 ?>
Comme indiqué dans le code ci-dessus :
Enregistrez le contenu que nous interrogeons directement dans le fichier html. Si le fichier existe, affichez-le. Sinon, s'il existe, accédez à la base de données et exécutez le processus de requête correspondant
Si vous souhaitez définir l'heure d'expiration du fichier, vous pouvez ajouter une condition de jugement dans l'instruction if pour déterminer si le fichier mis en cache a expiré, time () - le délai d'expiration défini
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!