Maison > Article > développement back-end > Principes et applications de la mise en mémoire tampon de sortie en PHP
Processus de mise en cache php
Dans le processus de demande d'un PHP, il passe en fait par trois caches :
1.Cache du programme
2. Cache .ob
3. Cache du navigateur.
Deux méthodes pour activer ob
1 Configurer dans php.ini ; ; signez ici et vous pourrez
2 Utiliser ob_start() dans la page php
est ouvert via php.ini, et cela s'appliquera à toutes les pages php ; L'ouverture avec ob_start() n'affecte que cette page
Points de connaissance du cache ob
Dans le service, si nous activons le cache ob, les données d'écho sont d'abord mises dans ob
Lorsque la page PHP est exécutée jusqu'à la fin, les données ob mises en cache (le cas échéant) seront rafraîchies de force dans le cache du programme, puis les données seront encapsulées dans un package de réponse http via Apache et renvoyées à Navigateur
S'il n'y a pas d'ob, toutes les données seront directement mises dans le cache du programme. Les informations d'en-tête sont toujours placées dans le cache du programme, que vous activiez ou non ob.
fonctions liées à ob
ob_start($callback)
//在当前页面中开启ob,注意callback ob_start($callback);
ob_get_contents()
//获取当前ob缓存中的内容 ob_get_contents()
ob_get_clean()
//获取当前ob缓存中的内容,并且清空当前的ob缓存 ob_get_clean()
ob_flush()
//将ob缓存中的内容,刷到程序缓存中,但并没有关闭ob缓存 ob_flush()
ob_end_flush()
//关闭ob缓存,并将数据刷回到程序缓存中 ob_end_flush()
ob_clean()
//将ob缓存中的内容清空 ob_clean()
ob_end_clean()
//将ob缓存中的数据清空,并且关闭ob缓存 ob_end_clean()
Note ob_start($callback) Rappel
<?php ob_start("callback_func"); function callback_func($str){ return "callback".$str; } echo "123";//输出:callback123
Scénario d'application
Rapport d'erreur avant l'envoi de header()
Code d'erreur
<?php echo "before_header"; header("Content-type:text/html;charset=utf-8"); echo "after_header";
Sortie :
Warning: Cannot modify header information - headers already sent by (output started at /Users/shuchao/Desktop/test.php:2) in /Users/shuchao/Desktop/test.php on line 3
Solution
Activez ob avant d'envoyer l'en-tête, puis tout le contenu de l'écho ira à ob, résolvant ainsi l'erreur.
<?php ob_start(); echo "before_header\n"; header("Content-type:text/html;charset=utf-8"); echo "after_header\n";
Sortie
before_header after_header
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!