PHP 缓存机制

Nov 23, 2016 am 10:19 AM

在写PHP程序的时候经常遇到这个问题;

包括使用header()函数,使用session()函数、cookies函数都有可能出次问题

PHP程序报如下错误:

Cannot modify header information - headers already sent by (output started at

不能够修改header infomation ,要解决这个错误需要明白两点问题。

第一,http协议

在http协议中,服务器向浏览器端输出html文件,html文件由两部分组成,一部分是我们页面本身的数据,还有一部分就是html页面的头信息,这些信息包含很多数据,如页面以何种编码格式显示、html数据大小、是否跳转、是否缓存等等。这些html头文件信息一经生成是不允许修改的。这就是上面报错的原因,Cannot modify header information,

第二,PHP的缓存机制

在php程序运行过程中,它有两部分缓存,一是程序缓存,我理解为程序在内存中的数据缓存;二是PHP提供的缓存模块,通过这个模块,PHP会另外在开辟一块地方作为数据的缓存,如果PHP模块缓存开启,则当程序中有echo数据的时候,数据被放入缓存中,而不是直接生成HTML文件,直到PHP程序运行完毕,再把模块缓存的数据一并生成HTML代码,包含头文件。下面举两个例子:

1.缓存未开启(默认是这样的)

1

2

3

4

5

<?php

echo "123";

header("Content-type:text/html;charset=utf-8")

echo "456";

?>

Copier après la connexion

这时候曝出Cannot modify header information 错误;

2. 开启缓存机制

1

2

3

4

5

6

<?php

ob_start() ; //开启页面缓存

echo "123";

header("Content-type:text/html;charset=utf-8")

echo "456";

?>

Copier après la connexion

在上述两个例子中,未开启缓存状态,当echo "123"; 的时候已经生成一份HTML代码, 到第三行的时候header函数就不能修改头文件信息,报错; 在例子2中ob_start() ; 开启缓存,(ob是output_buffer),当echo "123" 时候数据写入到缓存模块中, 然后header()函数运行,此时并未生成HTML页面,然后echo "456";也是输出到缓存模块,当程序执行完毕后,缓存模块的数据再生成完整的HTML页面,这样就不报错了。 

第二,PHP的缓存机制函数以及开启方式

如上所述,ob_start() 函数可以开启缓存模块,但此函数只是开启本页面的,如果必要的话,可以修改php.ini文件,找到output_buffering 选项,修改为output_buffering = 4096  (On也行),数字代表缓存大小。

PHP缓存机制还有一些函数,大家可是试试,能更好的理解PHP缓存机制

ob_start() 开始输出缓冲, 这时PHP停止输出, 在这以后的输出都被转到一个内部的缓冲里. 

ob_get_contents() 这个函数返回内部缓冲的内容. 这就等于把这些输出都变成了字符串. 

ob_get_ length() 返回内部缓冲的长度. 

ob_end_flush() 结束输出缓冲, 并输出缓冲里的内容. 在这以后的输出都是正常输出. 

ob_end_clean() 结束输出缓冲, 并扔掉缓冲里的内容.


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

Article chaud

Musée de deux points: Guide de localisation de Bungle Wasteland
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Musée de deux points: Guide de localisation de Bungle Wasteland
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

11 meilleurs scripts de raccourcissement d'URL PHP (gratuit et premium) 11 meilleurs scripts de raccourcissement d'URL PHP (gratuit et premium) Mar 03, 2025 am 10:49 AM

11 meilleurs scripts de raccourcissement d'URL PHP (gratuit et premium)

Travailler avec les données de session Flash dans Laravel Travailler avec les données de session Flash dans Laravel Mar 12, 2025 pm 05:08 PM

Travailler avec les données de session Flash dans Laravel

6 compétences supplémentaires que chaque développeur PHP devrait avoir 6 compétences supplémentaires que chaque développeur PHP devrait avoir Feb 28, 2025 am 10:52 AM

6 compétences supplémentaires que chaque développeur PHP devrait avoir

Comprendre les tableaux en php Comprendre les tableaux en php Feb 28, 2025 am 10:53 AM

Comprendre les tableaux en php

Misque de réponse HTTP simplifié dans les tests Laravel Misque de réponse HTTP simplifié dans les tests Laravel Mar 12, 2025 pm 05:09 PM

Misque de réponse HTTP simplifié dans les tests Laravel

Construisez une application React avec un Laravel Back End: Partie 2, React Construisez une application React avec un Laravel Back End: Partie 2, React Mar 04, 2025 am 09:33 AM

Construisez une application React avec un Laravel Back End: Partie 2, React

12 meilleurs scripts de chat PHP sur Codecanyon 12 meilleurs scripts de chat PHP sur Codecanyon Mar 13, 2025 pm 12:08 PM

12 meilleurs scripts de chat PHP sur Codecanyon

Curl dans PHP: Comment utiliser l'extension PHP Curl dans les API REST Curl dans PHP: Comment utiliser l'extension PHP Curl dans les API REST Mar 14, 2025 am 11:42 AM

Curl dans PHP: Comment utiliser l'extension PHP Curl dans les API REST

See all articles