在写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.缓存未开启(默认是这样的)
<?php
echo "123";
header("Content-type:text/html;charset=utf-8")
echo "456";
?>
这时候曝出Cannot modify header information 错误;
2. 开启缓存机制
<?php
ob_start() ; //开启页面缓存
echo "123";
header("Content-type:text/html;charset=utf-8")
echo "456";
?>
在上述两个例子中,未开启缓存状态,当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() 结束输出缓冲, 并扔掉缓冲里的内容.
分享到:
相关推荐
对于PHP开发者而言,深入理解PHP缓存机制对于构建高效稳定的Web应用至关重要。本文将围绕PHP缓存机制展开讨论,重点介绍其基本原理以及如何利用PHP内置函数优化缓存管理。 #### 二、PHP缓存基础概念 在PHP中,缓存...
在开始之前,需要了解缓存机制的基本概念。缓存是一种存储临时数据的手段,这些数据可能是从数据库或者耗时计算中获得的。在Web开发中,使用缓存可以减少对后端服务器的请求次数,提高网页加载速度,减少服务器的...
### 引入缓存机制提升性能 提高PHP编程效率 #### 概述 在现代Web开发中,PHP因其易用性和灵活性成为构建高效网站的重要工具之一。然而,随着用户需求的增长和技术的发展,优化PHP程序以提升性能变得越来越重要。...
缓存机制不仅仅局限于ASP.NET,其他编程语言和框架如Java(使用Ehcache或Spring Cache)、PHP(使用APC或Memcached)等也有各自的缓存实现。理解并掌握缓存原理及实践,对于提升Web应用的性能至关重要。 总结起来,...
在Web开发中,为了提高页面加载速度和性能,PHP提供了多种缓存机制。其中Output Control是PHP中用于控制输出缓冲的重要机制,它允许开发者控制脚本的输出,以便在最终发送到浏览器之前对输出进行处理或修改。在...
27. **缓存机制**:引入PHP缓存机制如APC或Memcached,以提高性能,减少编译开销。 28. **内存缓存**:使用Memcached缓存数据,减轻数据库压力。 29. **字符串长度检测**:使用isset代替strlen检测字符串长度,is...
1. **数据库查询缓存:**这是一种专门针对数据库查询结果的缓存机制。通过缓存查询结果,可以避免对同一查询的多次执行,减少数据库负载。 2. **页面缓存:**页面缓存技术可以将整个网页或其部分静态化,从而减少...
缓存机制是通过存储和重复使用先前计算的结果来优化性能。在PHP中,常见的缓存策略包括内存缓存(如Memcached)和文件缓存(如APC)。内存缓存如Memcached,将数据存储在内存中,避免了磁盘I/O操作,极大地提高了...
- **缓存**:为了提高性能,可考虑对静态内容使用HTTP缓存或PHP缓存机制。 这个实例为初学者提供了理解PHP和Ajax交互的一个具体场景,通过实践可以加深对这两种技术的理解,并掌握动态网站开发的基本流程。同时,...
这种方式需要缓存机制能够识别并匹配相同的查询语句,以便提供正确的缓存内容。 五、内存式缓存 内存式缓存将数据存储在服务器内存中,是性能最好的缓存方式。Memcached是常用的一种内存式缓存系统,它采用key-...
**PHP缓存机制配置** 在`php.ini`文件中,调整相关设置,如关闭错误显示(`display_errors=Off`),启用输出缓冲(`output_buffering=On`),并根据需要设置错误报告级别。 **PHP缓存技术** 使用PHP内置的缓存机制,如`...
**PHP内存缓存技术memcached** 是一种广泛用于加速Web动态应用程序的分布式内存对象缓存系统。它通过存储数据在内存中,避免了反复查询数据库,显著提升了网站性能。memcached设计简洁,易于部署,支持多种编程语言...
PHP缓存实现原理主要涉及到的是PHP的输出控制(Output Control)机制,这是一组用于管理脚本输出的函数,能够让我们在数据实际被输出到浏览器之前对其进行处理。这些功能对于优化网页性能,尤其是在动态网站中生成...
- 通过缓存机制减少数据库访问次数 - 对图片进行优化,减少加载时间 - 对CSS和JS文件进行压缩,减少加载时间 - 安装CDN,提高网站的访问速度 ### 阶段一:需求分析 在这个阶段,我们将对WordPress网站的性能进行...
22. **缓存机制**:引入PHP缓存机制,如memcached,可以显著提升性能,避免重复编译。 23. **运算码缓存**:使用如APC或OpCache这样的运算码缓存,可以减少脚本的编译时间。 24. **字符串长度检查**:尽管strlen()...
26. 脚本缓存:启用PHP缓存机制,如APC或OPcache,以避免重复编译。 27. memcached:利用内存缓存系统,如memcached,提高动态Web应用的性能并减轻数据库负担。 28. 运算码缓存:OP code缓存(如OPcache)可显著...
需要注意的是,尽管APC在过去的PHP版本中表现良好,但随着PHP的更新,如PHP 7及更高版本,官方推荐使用OPcache作为默认的PHP缓存机制。APC对于较旧的PHP版本(如PHP 5.x)可能更为适用,但在新版本中可能会遇到兼容...