Maison  >  Article  >  développement back-end  >  Principes et applications de la mise en mémoire tampon de sortie en PHP

Principes et applications de la mise en mémoire tampon de sortie en PHP

藏色散人
藏色散人avant
2019-10-22 13:43:071998parcourir

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer