php中flush()和ob_flush(),ob_end_flush()用法与区别

 更新时间:2016年11月25日 17:08  点击:1955
本文章来给大家总结介绍关于php中flush()和ob_flush(),ob_end_flush()用法与区别,有需要了解的朋友可进入参考参考。

首先来说说buffer,它是一个内存地址空间,为4096(1kb)【在php.ini配置文件中找到output_buffering配 置】,php有php output_buffering机制,php代码在执行的时候,并不是立即将内容输出,而是想将echo/print内容输出到buffer,buffer满的时候才会将数据交给系统内核交由tcp传给浏览器显示,当开启php php output_buffering机制(默认是开启的,可以通过ob_start()函数开启)后,只有当php buffer中的数据达到了设置值,才会将buffer中 的数据发送给浏览器。但是浏览器也是有缓存的,一些版本的浏览当数据达到256字节的时候才输出内容,
ob_start()函数:打开输出缓冲区.
    函数格式 void ob_start(void)
    说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容。

Flush:刷新缓冲区的内容,输出。
    函数格式:flush()
    说明:这个函数经常使用,效率很高。

ob_get_contents :返回内部缓冲区的内容。
    函数格式:string ob_get_contents(void)
    说明:这个函数会返回当前缓冲区中的内容,如果输出缓冲区没有激活,则返回 FALSE.

ob_get_length:返回内部缓冲区的长度。
    函数格式:int ob_get_length(void)
    说明:这个函数会返回当前缓冲区中的长度;和ob_get_contents一样,如果输出缓冲区没有激活,则返回 FALSE.

ob_end_clean:删除内部缓冲区的内容,并且关闭内部缓冲区
    函数格式:void ob_end_clean(void)
    说明:这个函数不会输出内部缓冲区的内容而是把它删除

ob_end_flush:发送内部缓冲区的内容到浏览器,并且关闭输出缓冲区
    函数格式:void ob_end_flush(void)
    说明:这个函数发送输出缓冲区的内容(如果有的话)

ob_implicit_flush:打开或关闭绝对刷新
    函数格式:void ob_implicit_flush ([int flag])
    说明:默认为关闭缓冲区,打开绝对输出后,每个脚本输出都直接发送到浏览器,不再需要调用 flush()    


flush()可以将等待输出的内容立即发送到客户端,而ob_flush()只有等待到buffer满的时候才输出,可以通过下面一个简单的php实例来验证下:

实例

 代码如下 复制代码

<?php
 //这是防止浏览器的缓存
 echo str_repeat(" ",1024);
 for($i=0;$i<5;$i++){
  echo $i; 
  sleep(1);
  flush();//会每隔1s输出一个数字,但是使用ob_flush()会等待5s一起输出
 }
?>

本文章来给大家介绍关于PHPMyAdmin设置数据库连接端口代码,有需要了解的朋友可参考。
 代码如下 复制代码

/* Authentication type and info */
$cfg['Servers'][$i]['auth_type'] = ‘config’;
$cfg['Servers'][$i]['user'] = ‘root’;
$cfg['Servers'][$i]['password'] = ”;
$cfg['Servers'][$i]['port'] = ’3307′;
$cfg['Servers'][$i]['extension'] = ‘mysql’;
$cfg['Servers'][$i]['AllowNoPassword'] = true;
$cfg['Lang'] = ”;

比如MySQL的端口设置为3308,可以把配置文件设置为:$cfg['Servers'][$i]['port'] = ’3308′;

生成静态页面是php中来减少服务器负载与seo网站优化一个不错的选择,所以php生成静态页面功能是几乎所有php程序员必须了解并掌握的一个知识点,下面我来给大家介绍php生成静态页面原理分析吧,有需要了解的朋友可进入参考。

生成html原理分析

我们把要生成的标签写成一个模板文件,然后再利用php读取把指定标签替换成我们要替换 内容就可以了,现在主流的dedecms系统也是这么做的

生成静态页面代码。


模板即尚未填充内容html文件。例如:

 代码如下 复制代码

temp.html

  <HTML>

  <TITLE>{ title }</TITLE>

  <BODY>

  this is a { file } fileArray;s templets

  </BODY>
</HTML>

  
templetest.php

<?php

  $title = "拓迈国际测试模板";

  $file  = "TwoMax Inter test templet,<br>author:Matrix@Two_Max";

  $fp  = fopen ("temp.html","r");

  $content  = fread ($fp,filesize ("temp.html"));

  $content .= str_replace ("{ file }",$file,$content);

  $content .= str_replace ("{ title }",$title,$content);

  echo $content;

?>

这样一个超简单的php生成静态页面的功能就实现了,但实现应用中这个不实用的,下面我介绍一个从数据库到生成实例。

1.创建测试数据库test,建立user表如下(自己插入几条测试数据库):

 代码如下 复制代码


CREATE TABLE IF NOT EXISTS `news` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `title` varchar(128) DEFAULT NULL,
  `content` text,
  `time` int(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=12 ;

2.建立连接数据文件conn.php

 

 代码如下 复制代码
<?php
 $dsn = "mysql:host=localhost;dbname=test;";
 $user = "root";
 $password = "";
 try{
  $dbh = new PDO($dsn,$user,$password);
 }catch(PDOException $e){
  echo "连接失败".$e->getMessage();
 }
?>

3.显示新闻列表(news.php),注意,其连接为静态html连接,这时还没生成,当然链接打不开:

 

 代码如下 复制代码
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<a href="add.php">添加文章</a>
<hr>
<?php
 require_once "conn.php";
 $sql = "select * from news";
 foreach($dbh->query($sql) as $row){
  echo "<a href='news_{$row['id']}.html'>{$row['title']}</a>----<a href='add.php?id={$row['id']}'>修改文章</a><br>";
 }
?>

4.添加修改文章页面:

 

 代码如下 复制代码
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<?php
 //获取修改的内容
 if($_GET['id']){
  require_once "conn.php";
  $sql = "select * from news where id={$_GET['id']}";
  $res = $dbh->query($sql)->fetch();
 }
?>
<form action="action.php" method="post">
 标题:<input type="text" name="title" value="<?=@$res['title']?>"/><br/>
 内容:<textarea name="content" col=40 row=4><?=@$res['content']?></textarea><br/>
 <input type="hidden" name="id" value="<?=$_GET['id']?>" />
 <input type="submit" name="submit" value="<?php echo $_GET['id'] ? '修改' : '添加'?>" />
</form>

5.用于生成静态文件的页面模板template.html

 代码如下 复制代码


<html>
<head>
<title>{title}</title>
  <meta http-equiv="content-type"content="text/html; charset=UTF-8"/>
</head>     
<body>
{title}发表于{time}
<hr>
{content}
</body>
</html>

6.action.php当然是用来生成和更新静态文件的:

 代码如下 复制代码


<?php
 //表单处理操作
 header("content-type:text/html;charset=utf-8");
 require_once 'conn.php';
 $title = $_POST['title'];
 $content = $_POST['content'];
 $time = time();
 if($_POST['submit']=='添加'){
  $sql = "insert into news values('','$title','$content',$time)";
  $dbh->query($sql);
  $id = $dbh->lastInsertId();
  $filename = "news_{$id}.html";
  $fp_tmp = fopen("template.html","r");
  $fp_html = fopen($filename,"w");
  while(!feof($fp_tmp)){
   $row = fgets($fp_tmp);
   $row = replace($row,$title,$content,date('Y-m-d H:i:s',$time));
   fwrite($fp_html,$row);
  }
  fclose($fp_tmp);
  fclose($fp_html);
  echo "添加成功并生成静态文件";
 }else{
  $sql = "update news set title = $title , content = $content ,time = $time where id ={$_POST['id']}";
  $dbh->query($sql);
  $filename = "news_{$_POST['id']}.html";
  @unlink($filename);
  $fp_tmp = fopen("template.html","r");
  $fp_html = fopen($filename,"w");
  while(!feof($fp_tmp)){
   $row = fgets($fp_tmp);
   $row = replace($row,$title,$content,date('Y-m-d H:i:s',$time));
   fwrite($fp_html,$row);
  }
  fclose($fp_tmp);
  fclose($fp_html);
  echo "更新成功并更新静态文件";
 }
 //逐行替换函数
  function replace($row,$title,$content,$time){
   $row=str_replace("{title}",$title,$row);
   $row=str_replace("{content}",$content,$row);
   $row=str_replace("{time}",$time,$row);
   return $row;
 }
?>


这样一个完整生php生成静态页面的系统就完成了。

在php中变量分为局部变量、变量函数、全局变量、动态变量、动态变量五种了,下面我来分别给各位朋友详细介绍关于这五种php变量使用方法,有需要了解的朋友可参考。

静态变量

动态变量当函数执行完之后,其存储空间会自动释放。而静态变量则当函数执行完后,存储空间仍然存储其变量。如果想利用函数的变量结果在进行计算,就需要将变量设置为静态变量。

php静态变量的设置方法是在变量前加”static”符号。

实例:

 代码如下 复制代码

<?php
 function fun(){
  static $i=0;
  echo "$i <br>";
  $i++;
 }
 fun();
 fun();
?>

动态变量

当我们定义了一个变量,就相当于在服务器申请了一个存储空间。动态变量即值不断变化的量,特点是当函数运行完成后,其变量存储空间的值就会自动释放。就比如货车拉货,运到目的地后就卸货,然后返回在拉。

实例:

 代码如下 复制代码

<?php
 function fun(){
  $i=0;
  echo "$i <br>";
  $i++;
 }
 fun();
 fun();
?>

全局变量

前面学习了局部变量,其值只在一定范围内有效,如果要实现跨域调用,则要用到全局变量。

php定义全局变量:全局变量的声明只要在变量名前加上”global”就可以了,定义了全局变量之后,主程序的变量可以被函数内部调用,同样地函数内的变量也可以被主程序所用。

实例1:

 代码如下 复制代码

<?php
 $a=1;
 function fun(){
  echo $a ."<br>"; /* $a为局部变量,不显示内容 */
  global $a;  /* 定义$a为全局变量 */
  echo $a ."<br>";
  global $b;
  $b=10;
 }
 fun();
 echo $b;
?>

局部变量

在php语言中,变量都有一定的作用范围,一旦离开,变量将失去意义或者发生改变,称之为变量作用域。就好象局域网,只在组建的办公室或者宿舍有效,一旦超出这个范围将连接不到网络。按变量的作用范围可以分为局部变量和全局变量,这里先讲局部变量。

php局部变量值函数内定义的变量只在函数内使用,函数外无效;同样地,函数外定义的变量如果没有传递,在函数内也无效。

实例:

 代码如下 复制代码
<?php
 function fun(){
  $a1=5;
  echo $a2;
 }
 fun();
 $a2=10;
 echo $a1;
?>

 

以上代码运行后什么也没有输出。

变量函数

变量不仅可以用一些英文字母等字符等义, 也可以对函数定义。如果将一个变量名后加上”()”符号,php将寻找与变量的值相同的函数执行,称之为变量函数。

实例:

 代码如下 复制代码

<?php
 function p($name){
  echo "my name is ".$name;
 }
 $someone="p";  /* 将字符串"p"赋给$someone */
 $someone('Tom'); /* 这里等价于$p('Tom'),是一个变量函数 */
?>

本文章来给各位php 初学者介绍一篇关于php中全局变量session会话的基本使用方法,有需要了解的朋友可进入参考参考。

Session是什么

Session是指有始有终的一系列动作或信息,比如去看电影从进入影院到走出影院的整个过程可以称为一个Session。Cookie将数据存储在客户端计算机上,而Session将不定量的变量存储在服务器端。

每一个用户链接网站服务器后便会产生一个Session,所以首先要告诉服务器使用Session功能来存储数据。启用Session功能的方式有两种:

1、使用session_start()函数启动会话,其结构形式如下:

session_start()
函数不能带参数,其返回值为布尔型。

2、在php.ini中设置参数 session.auto_start,将此参数设为1,即当有连接到服务器后Session功能将自动启用。

启动Session后,在使用Session变量之前首先要注册变量,之后才能使用,反之不使用某个变量时就要取消注册。Session_register(变量名)可以注册一个Session变量;Session_unregister(变量名)可以取消注册一个Session变量,例如:

 代码如下 复制代码

session_start(); /* 启动session变量 */
session_register('user') /* 注册user变量 */
session_unregister('user') /* 注销user变量 */

调用session变量

php session使用方法:用函数$_SESSION[]可以创建一个函数变量,其格式如下:

 代码如下 复制代码

$_SESSION['$string']=$str;

参数$string是要定义的变量名,$str是变量值。在调用时使用$_SESSION[$string]的格式。

实例:

 代码如下 复制代码

<?php
 session_start();
 $_SESSION['name']="Jane";
 $_SESSION['password']="888888";
 echo "用户名是: " .$_SESSION['name'] ."<br>";
 echo "密码是: " .$_SESSION['password'] ."<br>";
?>

session的使用

本站前面介绍了session的一些概念以及基本操作,这里通过实例介绍php session使用的方法。

实例代码:

 代码如下 复制代码

<?php
 session_start(); /* 启动session */
 $_SESSION['name']="LIMing";
 $_SESSION['password']="888888";
 $_SESSION['time']=time();
 echo "<a href='session.php' target='_blank'>传递session</a><br />"
?>

session.php代码:

 代码如下 复制代码
<?php
 session_start();
 echo "用户名是:" .$_COOKIE['name'] ."<br>";
 echo "密码是:" .$_SESSION['password'] ."<br>";
 echo "访问时间是:" .date('Y m d H:i:s', $_SESSION['time']) ."<br>";
?>

 

获取session_id的值

每一个session都有会被指定一个特定的id,用session_id来标识。我们可以通过session_id()函数查看当前session_id的值,其结构形式如下:

session_id()

实例:

 代码如下 复制代码

<?php
 session_start(); /* 启动session */
 $id=session_id(); /* 获取当前session_id */
 echo "当前sessionID是: " .$id;
?>

cookie与session的区别

session和cookie都是重要的会话管理应用,在许多的php开发项目都会用到。它们的作用是能够给不同的用户创建不同的值,从而让不同的用户返回的结果都不相同。

那么session cookie区别在哪里呢?

cookie是利用客户端来创建,当用户用浏览器打开网站时就会给用户创建一个cookie,这个过程是由用户的电脑执行的,网站的服务器只是发送一些指令。因此如果用户禁止了cookie功能,则无法利用cookie来实现相关功能。

session则是利用服务端来创建,整个过程都由服务器来执行,用户无权干预。

在运用时,如果你希望节约服务器的资源,可以选用cookie来进行会话管理;如果你希望所有的浏览者都能使用会话管理,则应该选用session。

[!--infotagslink--]

相关文章

  • mysql_connect与mysql_pconnect的区别详解

    在mysql中我们会看到有两种常用的数据库连接模式,一种是长久连接,另一各是页面访问完之后就断了连接,下面我来分别介绍mysql_connect与mysql_pconnect的区别,有需要了解...2016-11-25
  • C#中using的三种用法

    using 指令有两个用途: 允许在命名空间中使用类型,以便您不必限定在该命名空间中使用的类型。 为命名空间创建别名。 using 关键字还用来创建 using 语句 定义一个范围,将在此...2020-06-25
  • C#中out与ref的区别实例解析

    这篇文章主要介绍了C#中out与ref的区别实例解析,对C#初学者有不错的学习借鉴价值,需要的朋友可以参考下...2020-06-25
  • PHP中func_get_args(),func_get_arg(),func_num_args()的区别

    复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04
  • 谈谈Jquery中的children find 的区别有哪些

    精华:find方法能找子孙,children方法只能找儿子一、Jquery中children 语法.children(selector) 说明expr是表达式,可选参数,所有选择器中的表达式都可以用在这,比如按标签名"div",按类名".class",按序号":first"等等,如果表...2015-10-21
  • iscroll.js 用法介绍

    最新版下载: http://www.csdn123.com/uploadfile/2015/0428/20150428062734485.zip 概要 iScroll 4 这个版本完全重写了iScroll这个框架的原始代码。这个项目的产生...2016-05-19
  • PS中像素大小、文档大小的区别

    在PS中像素大小、文档大小有什么区别呢,这个估计很多初学者不清楚,下面我来给大家讲解一下,希望对你有帮助。 1、像素大小 通常用于显示屏显示的图片大小的调整。菜...2016-09-14
  • C++中cin的用法详细

    这篇文章主要介绍了C++中cin的用法详细,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
  • C#中的try catch finally用法分析

    这篇文章主要介绍了C#中的try catch finally用法,以实例形式分析了try catch finally针对错误处理时的不同用法,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 示例详解react中useState的用法

    useState 通过在函数组件里调用它来给组件添加一些内部 state,React 会在重复渲染时保留这个 state,接下来通过一个示例来看看怎么使用 useState吧...2021-06-04
  • C#中sleep和wait的区别分析

    这篇文章主要介绍了C#中sleep和wait的区别分析,有助于深入理解C#中线程的原理与使用技巧,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • uniapp和vue的区别详解

    这篇文章主要介绍了uniapp和vue的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-10-19
  • PHP中print_r、var_export、var_dump用法介绍

    文章详细的介绍了关于PHP中print_r、var_export、var_dump区别比较以及这几个在php不同的应用中的用法,有需要的朋友可以参考一下 可以看出print_r跟var_export都...2016-11-25
  • php中php://input的用法详细

    在使用xml-rpc的时候,server端获取client数据,主要是通过php输入流input,而不是$_POST数组。所以,这里主要探讨php输入流php://input。 下面的例子摘取的是wordpres...2016-11-25
  • Delphi常用关键字用法详解

    这篇文章主要介绍了Delphi常用关键字用法,包括了各个常用的关键字及其详细用法,需要的朋友可以参考下...2020-06-30
  • list与push的区别

    //函数list while(list($id,$username,$password,$add_date,$mdn,$mobile,$channel,$last_date,$area,$nickname) = mysql_fetch_array($rs)){ ...2016-11-25
  • MySQL中的主键以及设置其自增的用法教程

    1、声明主键的方法: 您可以在创建表的时候就为表加上主键,如: CREATE TABLE tbl_name ([字段描述省略...], PRIMARY KEY(index_col_name)); 也可以更新表结构时为表加上主键,如: ALTER TABLE tbl_name ADD PRIMARY KEY (in...2015-11-24
  • input框中的name和id的区别

    这篇文章主要介绍了input框中的name和id的区别介绍,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2016-11-22
  • C#中this的用法集锦

    本文给大家汇总介绍了C#中的几种this用法,相信大家应该有用过,但你用过几种?以下是个人总结的this几种用法,欢迎大家拍砖,废话少说,直接列出用法及相关代码。...2020-06-25
  • window.onerror()的用法与实例分析

    目前在做window.onerror时上报js错误信息的事,整理下相关资料,需要的朋友可以参考下...2016-01-29