Maison > développement back-end > tutoriel php > 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

藏色散人
Libérer: 2023-04-07 17:36:01
avant
2052 Les gens l'ont consulté

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);
Copier après la connexion

ob_get_contents()

//获取当前ob缓存中的内容
ob_get_contents()
Copier après la connexion

ob_get_clean()

//获取当前ob缓存中的内容,并且清空当前的ob缓存
ob_get_clean()
Copier après la connexion

ob_flush()

//将ob缓存中的内容,刷到程序缓存中,但并没有关闭ob缓存
ob_flush()
Copier après la connexion

ob_end_flush()

//关闭ob缓存,并将数据刷回到程序缓存中
ob_end_flush()
Copier après la connexion

ob_clean()

//将ob缓存中的内容清空
ob_clean()
Copier après la connexion

ob_end_clean()

//将ob缓存中的数据清空,并且关闭ob缓存
ob_end_clean()
Copier après la connexion

Note ob_start($callback) Rappel

<?php
ob_start("callback_func");
function callback_func($str){
    return "callback".$str;
}
echo "123";//输出:callback123
Copier après la connexion

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";
Copier après la connexion

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
Copier après la connexion

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";
Copier après la connexion

Sortie

before_header
after_header
Copier après la connexion

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!

Étiquettes associées:
php
source:segmentfault.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal