php输出控制的学习笔记

   1、简介

  当PHP脚本有输出时,输出控制函数可以用这些来控制输出。这在多种不同情况中非常有用,尤其是用来在脚本开始输出 数据后,发送http头信息到浏览器。输出控制函数不影响由 header()或setcookie()发送的文件头信息,仅影响像echo这样的函数和PHP代码块间的数据。

  2、作用

  1)、如官方介绍说,为了避免在输出文件头信息如header()和setcookie()之前出现输出而发生的错误。可以使用输出缓存函数。如下代码

 代码如下  
<?php 
    ob_start();      //打开缓存控制函数
    echo 'hello';
    header('Location: http://www.111cn.net/');
?>

  2)、将输出内容放入缓存区,如需进行其他操作,如将输出写入缓存文件,可将缓冲区内容写入缓存文件,然后输出。

 代码如下  
 ob_start();
    echo 'hello';
    $file = ob_get_contents();
    ob_end_clean();
    write_cache($file);    //将缓冲区内容写入缓存函数,实现细节省略

  3)、获取某些无返回值内置函数的输出内容,如phpinnfo();

 代码如下  
<?php
ob_start();
phpinfo();
$file = ob_get_contents();   //phpinfo()输出内容
ob_end_clean();
 
?>

  4)、在使用框架的时候,我们会发现框架中会将输出缓冲然后进行变量替换。最后输出。

  除了这些内容,我们还可以利用输出缓存进行错误处理,具体看代码。我们可以将错误信息获取,以更加友好的方式输出。

 代码如下  
<?php
 
function display_error()
{
 if($errors = error_get_last())
 {
  return var_export($errors , TRUE);
 }
 return FALSE;
}
 
$dis_error = 'display_error';
 
//$a = 3;
 
ob_start( $dis_error );
 
echo $a;

  附:ob_start()官方解释:

  bool ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]] )

  此函数将打开输出缓冲。当输出缓冲激活后,脚本将不会输出内容(除http标头外),相反需要输出的内容被存储在内部缓冲区中。

  内部缓冲区的内容可以用 ob_get_contents() 函数复制到一个字符串变量中。 想要输出存储在内部缓冲区中的内容,可以使用 ob_end_flush() 函数。另外, 使用 ob_end_clean() 函数会静默丢弃掉缓冲区的内容。

  output_callback

  可选参数 output_callback 函数可以被指定。 此函数把一个字符串当作参数并返回一个字符串。 当输出缓冲区被( ob_flush(), ob_clean() 或者相似的函数)冲刷(送出)或者被清洗的时候;或者在请求结束之际输出缓冲区内容被冲刷到浏览器的时候该函数将会被调用。 当调用 output_callback 时,它将收到输出缓冲区的内容作为参数 并预期返回一个新的输出缓冲区作为结果,这个新返回的输出缓冲区内容将被送到浏览器。 如果这个 output_callback 不是一个可以调用的函数,此函数 会返回 FALSE 。

  如果回调函数有两个参数,第二个参数会由一个位域补充,该位域由 PHP_OUTPUT_HANDLER_START, PHP_OUTPUT_HANDLER_CONT 和 PHP_OUTPUT_HANDLER_END 组成。

  如果 output_callback 返回 FALSE ,其原来的输入 内容被直接送到浏览器。

  这个参数 output_callback 可以通过直接给一个 NULL 值而避开。

  ob_end_clean(), ob_end_flush(), ob_clean(), ob_flush() and ob_start() 不能从一个回调函数中调用。 如果从回调函数中调用了它们,产生的行为是不明确的。 如果想要删除缓冲区的内容,从回调函数中返回一个”" (空字符串)。 更不能从一个回调函数中使用像print_r($expression, true) 或highlight_file($filename, true) 一样的输出缓冲函数。

时间: 2024-08-31 02:04:06

php输出控制的学习笔记的相关文章

php cookie注销 设置 输出和注销学习笔记

setcookie() 函数用于设置 cookie. 注释:setcookie() 函数必须位于 <html> 标签之前. 语法 setcookie(name, value, expire, path, domain); 下面看实例  代码如下 复制代码 <?php //注销cookie if(isset($_GET['out'])){ setcookie('us',""); echo "<script>location.href='index.

SAS学习笔记之《SAS编程与数据挖掘商业案例》(4)DATA步循环与控制、常用全程语句、输出控制

SAS学习笔记之<SAS编程与数据挖掘商业案例>(4)DATA步循环与控制.常用全程语句.输出控制 1. 各种循环与控制 DO组 创建一个执行语句块 DO循环 根据下标变量重复执行DO和END之间的语句 DO WHILE 重复执行直到条件为假则退出循环 DO UNTIL 重复执行直到条件为真则退出循环 DO OVER 对隐含下标数组元素执行DO/END之间的语句 END 退出DO或SELECT语句的标志 SELECT 选择执行SAS语句 IF-THEN/ELSE有条件执行一个SAS语句 GO

HTML5 video标签(播放器)学习笔记(二):播放控制

HTML5 video标签(播放器)学习笔记(二):播放控制 本文的目录: 1.获取影片总时长 2.播放.暂停 3.获取影片已播放时间和设置播放点 4.音量的获取和设置 第一.获取影片总时长 对播放器(video)操作,首先要得到的是影片的一些信息,其中一个就是总时长,除了内容以为,总时长也是第一时间要显示的.在对video进行操作的的前先给video标签添加一个ID,这样方便我们获取video元素 代码如下: <video id="myVideo" controls prelo

Mysql学习笔记(三)运算符和控制流函数

原文:Mysql学习笔记(三)运算符和控制流函数 本章学习内容: 1.操作符 2.控制流程函数   操作符: i.圆括号.. 简单的介绍一下圆括号,圆括号的使用的目的是规定计算表达式的顺序...这个想必大家都熟悉例如  mysql>select 1+(2*3) mysql>select (1+2)*3 ii.比较运算符. 比较运算符就比较多了,并且也很常用..比如   = 等于: mysql> SELECT 1 = 0; -> 0 mysql> SELECT '0' = 0;

spring学习笔记(19)mysql读写分离后端AOP控制实例

在这里,我们接上一篇文章,利用JNDI访问应用服务器配置的两个数据源来模拟同时操作不同的数据库如同时操作mysql和oracle等.实际上,上个例子可能用来模拟mysql数据库主从配置读写分离更贴切些.既然如此,在本例中,我们就完成读写分离的模拟在web端的配置实例. 续上次的例子,关于JNDI数据源的配置和spring datasource的配置这里不再重复.下面着重加入AOP实现DAO层动态分库调用.可先看上篇文章<spring学习笔记(18)使用JNDI模拟访问应用服务器多数据源实例 >

作为一个新手的Oracle(DBA)学习笔记

Oracle数据库笔记 Jack Chaing 作者QQ595696297 交流群 127591054 祝大家学习进步. 如果大家想看Word版本的可以去下载:Word排版比较清晰一些. http://download.csdn.net/detail/jack__chiang/9810532 此笔记是作者本人去年开始从一个DBA新人的学习笔记,积累至今,希望拿出来给那些对DBA有兴趣的童孩学习,大家一起努力嘛. 此笔记记录了作者工作学习中从零基础的学习的记录,和从中遇见的问题与问题的解决!很高兴

PowerDesigner16工具学习笔记-工具介绍

原文:PowerDesigner16工具学习笔记-工具介绍 1.初始界面 1.1 .浏览窗口:本地(Local)浏览窗口.知识库(Repository)浏览窗口       Local:用于显示本地模型       Repository:用于显示知识库模型 1.2 .输出窗口:用于显示操作过程中的相关信息.         General:用于显示建模过程中的相关信息         Check Model:用于显示模型检查过程中的相关信息         Generation:用于显示模型生成

Hadoop学习笔记(一):MapReduce的输入格式

    Hadoop学习有一段时间了,但是缺乏练手的项目,老是学了又忘.想想该整理一个学习笔记啥的,这年头打字比写字方便.果断开博客,咩哈哈~~     开场白结束(木有文艺细胞)     默认的MapReduce作业 import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configured; import org.apache.hadoop.fs.Path; import org.apache.h

我的Android进阶之旅------&amp;gt;Android中编解码学习笔记

编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等.最近因为项目的关系,需要理清媒体的codec,比较搞的是,在豆丁网上看运营商的规范 标准,同一运营商同样的业务在不同文档中不同的要求,而且有些要求就我看来应当是历史的延续,也就是现在已经很少采用了.所以豆丁上看不出所以然,从 wiki上查.中文的wiki信息量有限,很短,而wiki的英文内容内多,