php中header()实现页面跳方法

 更新时间:2016年11月25日 17:30  点击:2111
本文章利用header()函数来实现页面跳,我们介绍到404,302,301等状态跳转哦,下面有很多的状态自定的函数有需要的同学可以测试一下。

header实现302临时重定向

 代码如下 复制代码
Header("HTTP/1.1 302 Found");
Header("Location: http://www.111cn.net");

header实现404无法找到页面

 代码如下 复制代码
Header("HTTP/1.1 404 Not Found");

一下函数可实现各种状态的跳转:

 代码如下 复制代码

/**
* 跳转页面
*
* 使用header()进行页面跳转,不显示任何内容.如果不能使用header跳转
* @param string $url
* @param int $status
*/
function goto($url,$status=null)
{
if(!empty($status))
{
$status=intval($status);
$codes    = array(
100 => "Continue",
101 => "Switching Protocols",
200 => "OK",
201 => "Created",
202 => "Accepted",
203 => "Non-Authoritative Information",
204 => "No Content",
205 => "Reset Content",
206 => "Partial Content",
300 => "Multiple Choices",
301 => "Moved Permanently",
302 => "Found",
303 => "See Other",
304 => "Not Modified",
305 => "Use Proxy",
307 => "Temporary Redirect",
400 => "Bad Request",
401 => "Unauthorized",
402 => "Payment Required",
403 => "Forbidden",
404 => "Not Found",
405 => "Method Not Allowed",
406 => "Not Acceptable",
407 => "Proxy Authentication Required",
408 => "Request Time-out",
409 => "Conflict",
410 => "Gone",
411 => "Length Required",
412 => "Precondition Failed",
413 => "Request Entity Too Large",
414 => "Request-URI Too Large",
415 => "Unsupported Media Type",
416 => "Requested range not satisfiable",
417 => "Expectation Failed",
500 => "Internal Server Error",
501 => "Not Implemented",
502 => "Bad Gateway",
503 => "Service Unavailable",
504 => "Gateway Time-out"
);
if (array_key_exists($status,$codes)) {
$code    = $status;
$msg    = $codes[$status];
$status = "HTTP/1.1 {$code} {$msg}";
} else {
$status = null;
}
}
if (!empty($status)) {
header($status);
}
if(!empty($url)) {
$url=url($url);header("Location: $url");
if ($code==404) {
echo "<meta http-equiv='refresh' content='0;url=$url'>";
}
}
exit;
}

本文章介绍了利用php来获取baidu的快照与收录代码,下面我们来看看在php利用什么样的函数与编码转换函数的本实例中的应用吧。

先来看看效果代码如下

百度收录及快照

 代码如下 复制代码

<?php
    $domain = "www.111cn.net";  /*欲查询的域名*/
    $site_url = 'http://www.baidu.com/s?wd=site%3A';
    $all = $site_url.$domain; /*域名所有收录的网址*/
    $today = $all.'&lm=1';    /*域名今日收录的网址*/
    $utf_pattern = "/找到相关结果数(.*)个/";
    $gb2312_pattern = iconv("UTF-8","GB2312",$utf_pattern); /*因为百度为GB2312编码*/
    $kz_pattern = "/<span class="g">(.*)</span>/"; /*用以匹配快照日期的字符串*/
    $times = "/d{4}-d{1,2}-d{1,2}/"; /*匹配快照日期的正则表达式,如:2011-8-4*/
    $s0 = @file_get_contents($all);    /*将site:www.111cn.net的网页置入$s0字符串中*/
    $s1 = @file_get_contents($today);
    preg_match($gb2312_pattern,$s0,$all_num); /*匹配"找到相关结果数*个"*/
    preg_match($gb2312_pattern,$s1,$today_num);
    preg_match($kz_pattern,$s0,$temp);
    preg_match($times,$temp[0],$screenshot);
    if($all_num[1] == "")
        $all_num[1] = 0;
    if($today_num[1] == "")
        $today_num[1] = 0;
    if($screenshot[0] == "")
        $screenshot[0] = "暂无快照";
?>
<html>
    <head>
    <title>Test</title>
    </head>
<body>
    <p>百度收录:<a href="<?php echo $all; ?>" target="_blank"><?php echo $all_num[1]; ?></a></p>
    <p>百度今日收录:<a href="<?php echo $today; ?>" target="_blank"><?php echo $today_num[1]; ?></a></p>
    <p>百度快照日期:<a href="<?php echo $all; ?>"><?php echo $screenshot[0]; ?></a></p>
</body>
</html>

以前都是利用js来实例聊天室或无刷新输出,其实php了可以单独实现哦,在php中我们利用flush() ob_flush()可以了。

ob_end_clean(); //清除输出缓存并且关闭缓存
echo str_pad(' ',256);//输出256字节空格(在ie浏览器下要接受大于256个字节才会输出显示

 代码如下 复制代码
for($i=0;$i<5;$i++){
  
echo '<br/>abc___'.$i;
flush();
ob_flush();
sleep(1);
}

该方法在opera下不可用,因为opera浏览器在不遇到一个html标签之前是不输出内容的

文章介绍了关于如何利用遍历的方式来实现字符串编码的相互转换,有需要了解的字符串,对象,或者数组转的可以看一下。
 代码如下 复制代码

/**
 * 循环实现编码互转
 *
 * @param string $param(字符串,对象,或者数组),$currCharset当前编码,$toCharset期望编码
 * @return 参数类型
 */
function zhandi_iconv($param,$currCharset,$toCharset){
 if ($currCharset != $toCharset){
  if (is_string($param)){
   return iconv($currCharset, $toCharset, $param);
  }
  elseif (is_array($param)){
   foreach ($param as $key => $value){
    $param[$key] = zhandi_iconv($value);
   }
   return $param;
  }
  elseif (is_object($param)){
   foreach ($param as $key => $value){
    $param->$key = zhandi_iconv($value);
   }
   return $param;
  }
  else{
   return $param;
  }
 }
 return $param;
}

一、             基本概念

1、  PDO:PHP Data Object的缩写。PDO扩展类库为PHP定义了一个轻量级的、一致性的接口,它提供了一个数据访问抽象层,这样无论使用什么数据库,都可以通过一致的函数执行查询和获取数据。

PDO就是一个“数据库访问抽象层”,作用是统一各种数据库的访问接口。

2、  对任何数据库的操作,并不是使用PDO扩展本身执行的,必须针对不同的数据库服务器使用特定的PDO驱动程序访问。如:MYSQL(PDO_MYSQL)。可以在phpinfo()函数中查看PDO部分的列表。

二、PDO的安装

1、Linux:安装PHP时,向configure命令中添加如下标志:

–with-pdo-mysql=/usr/local/mysql              //其中/usr/local/mysql为mysql安装目录

2、Windows:

在C:windows下找到php.ini文件

(1)打开:extension=php_pdo.dll

(2)打开:extension=php_pdo_mysql.dll

三、使用PDO过程

1、连接数据库

(1)创建PDO对象

(2)设置PDO行为属性(setattribute())

(3)设置字符集($link->query(‘set names UTF8’))

2、发送SQL语句

(1)准备SQL语句

(2)执行发送

3、查看结果

四、连接数据库

1、创建PDO对象:

(1)$link = new PDO(DSN, 用户名, 密码, 驱动属性);

1)DSN:数据源名,用来定义一个必须用到的驱动程序和要使用的数据库。mysql的DSN格式:’mysql:host=localhost;dbname=lamp30’

2)可以将DSN放到文件里,如:’uri:file:///usr/local/dsn.txt’

3)创建对象时要使用try…catch语句,因为在声明PDO实例发生错误时,会自动抛出一个异常。如:

 代码如下 复制代码

try{

$link = new PDO(‘mysql:host=localhost;dbname=lamp30’,’root’,’111111’);

}catch(PDOException $e){

echo $e->getMessage();

exit(‘连接数据库错误.’);

}

2、驱动属性

(1)可以将必要的几个选项组成数组(属性名作为元素键,属性值作为元素值)传递给构造方法的第四个参数。如果没有在构造方法中定义驱动属性,可以在之后使用PDO类的setattribute()函数定义各个属性。

(2)书P501页有这些属性中文释义。

3、设置字符集:$link->query(‘set names UTF8’)

五、发送SQL语句

(1)$link->exec():执行增删改,返回受影响行数,执行失败返回false或0。

(2)$link->query():执行查询,返回PDOStatement结果集对象。

六、查询结果

1、非查询:

(1)直接用$link->exec()的返回影响行数

(2)$link->lastInsertId()返回最后一条INSERT命令生成的AUTO_INCREMENT编号值

2、见预处理

七、预处理

1、第二步:发送SQL语句

 代码如下 复制代码

$stmt = $link->prepare(‘select * from user where id=:id’);

$stmt->bindparam(‘:id’, $id, PDO::PARAM_INT);

$id = 2;

$stmt->execute();

bindParam()参数有以下7种:可以不用写

PDO::PARAM_INT

PDO::PARAM_STR

PDO::PARAM_BOOL

PDO::PARAM_NULL

PDO::PARAM_LOB:大对象数据类型

PDO::PARAM_STMT:PDOstatement类型

PDO::PARAM_INPUT_OUTPUT:存储过程使用的数据类型

2、第三步:

如:

 代码如下 复制代码

$stmt = $link->query(‘select * from user’);

(1)fetch()方法

$pdoStat ->bindColumn(1, $id);                 //第一个参数可以是从1开始的索引值

$pdoStat ->bindColumn(‘name’, $name);    //也可以是列名

$pdoStat ->bindColumn(‘pass’, $pass);

while($row = $stmt ->fetch(PDO::FETCH_BOUND)){

echo $id.’ ’;

echo $name.’ ’;

echo $pass.’<br>’;

}

fetch()参数有六种:见手册。

可以用setFetchMode()方法设置默认模式。

(2)fetchall()方法

 代码如下 复制代码

$result = $stmt ->fetchall();

foreach($result as $row){

echo $row[‘id’].’ ’;

echo $row[‘name’].’ ’;

echo $row[‘pass’].’<br>’;

}

Fetchall()参数与fetch()相同。

八、事务处理

1、关闭自动提交(在驱动属性中修改)

2、打开事务

3、提交事务/回滚

4、打开自动提交

如:

 代码如下 复制代码

$link = new PDO(‘mysql:host=localhost;dbname=lamp30’);

//1

$link->setattribute(PDO::ATTR_AUTOCOMMIT, false);

//2

$link->begintransaction();

$result = $link->exec(‘insert into user(name,paa) values(‘wsy’,’111’)’);

//3

if($result){

$link->commit();

}else{

$link->rollback();

}

//4

$link->setattribute(PDO::ATTR_AUTOCOMMIT, true);

九、PDO对象中的成员方法

1、$link->getattribute(属性名):获取一个驱动属性。

2、$link->setattribute(属性名,属性值):设置一个驱动属性。

1)因oracle把空字符串返回为NULL值,而其它数据库无此特性,为了有更好的兼容性$link->setattribute(PDO::ATTR_ORACLE_NULLS ,PDO::NULL_EMPTY_STRING,);

2)有三种显示错误的方式:静态、WARNING消息、异常

3、$link->errorcode():获取错误码。

1)如setattribute函数设置显示错误方式为静态,则出现错误时什么都不显示,必须调用此函数,才能查看错误号。

4、$link->errorinfo():获取错误信息(数组)。

1)如setattribute函数设置显示错误方式为静态,则出现错误时什么都不显示,必须调用此函数,才能查看错信息。

5、$link->lastinsertid():获取插入到表中的最后一条数据主键值(如有多条数据同时插入,返回第一个插入行的ID)。

6、$link->prepare():发送准备的SQL语句,返回PDOStatement对象。

7、$link->begintransaction():打开事务。

8、$link->commit():提交一个事务,执行一个SQL。

9、$link->rollback():回滚一个事务。

十、错误模式

1、静态模式:

 代码如下 复制代码

$link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT)

(1)       默认模式,在错误发生时不进行任何操作,PDO将只设置错误代码。

(2)       查看错误可以调用errorCode()和errorInfo(),PDO和PDOStatement类都有这两个方法。

2、警告模式:

 代码如下 复制代码

$link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING)

(1)此模式在设置错误代码以外,PDO还将发出一条PHP传统的E_WARNING消息。

(2)这是mysql和mysqli显示错的方式。

3、异常模式:

 代码如下 复制代码

$link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)

(1)       此模式在设置错误代码以外,PDO还将抛出一个PDOException,并设置其属性,以反映错误代码和错误信息。

(2)       如果异常导致脚本终止,则事务将自动回滚。

(3)       PDO推荐使用此模式。

十一、持久连接

 代码如下 复制代码

$link->setAttribute(PDO::ATTR_PERSISTENT, true);

持久连接即当脚本执行结束时不会自动断开连接,而且用$link->close()不能关闭连接。

[!--infotagslink--]

相关文章

  • php 中file_get_contents超时问题的解决方法

    file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25
  • php抓取网站图片并保存的实现方法

    php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
  • php语言实现redis的客户端

    php语言实现redis的客户端与服务端有一些区别了因为前面介绍过服务端了这里我们来介绍客户端吧,希望文章对各位有帮助。 为了更好的了解redis协议,我们用php来实现...2016-11-25
  • HTTP 408错误是什么 HTTP 408错误解决方法

    相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
  • jQuery+jRange实现滑动选取数值范围特效

    有时我们在页面上需要选择数值范围,如购物时选取价格区间,购买主机时自主选取CPU,内存大小配置等,使用直观的滑块条直接选取想要的数值大小即可,无需手动输入数值,操作简单又方便。HTML首先载入jQuery库文件以及jRange相关...2015-03-15
  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • ps把文字背景变透明的操作方法

    ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
  • intellij idea快速查看当前类中的所有方法(推荐)

    这篇文章主要介绍了intellij idea快速查看当前类中的所有方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02
  • Mysql select语句设置默认值的方法

    1.在没有设置默认值的情况下: 复制代码 代码如下:SELECT userinfo.id, user_name, role, adm_regionid, region_name , create_timeFROM userinfoLEFT JOIN region ON userinfo.adm_regionid = region.id 结果:...2014-05-31
  • js导出table数据到excel即导出为EXCEL文档的方法

    复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ht...2013-10-13
  • mysql 批量更新与批量更新多条记录的不同值实现方法

    批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
  • JS实现的简洁纵向滑动菜单(滑动门)效果

    本文实例讲述了JS实现的简洁纵向滑动菜单(滑动门)效果。分享给大家供大家参考,具体如下:这是一款纵向布局的CSS+JavaScript滑动门代码,相当简洁的手法来实现,如果对颜色不满意,你可以试着自己修改CSS代码,这个滑动门将每一...2015-10-21
  • ps怎么制作倒影 ps设计倒影的方法

    ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果&#819...2017-07-06
  • js基础知识(公有方法、私有方法、特权方法)

    本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
  • 安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法

    手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21
  • PHP 验证码不显示只有一个小红叉的解决方法

    最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
  • c#中分割字符串的几种方法

    单个字符分割 string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab de...2020-06-25
  • js控制页面控件隐藏显示的两种方法介绍

    javascript控制页面控件隐藏显示的两种方法,方法的不同之处在于控件隐藏后是否还在页面上占位 方法一: 复制代码 代码如下: document.all["panelsms"].style.visibility="hidden"; document.all["panelsms"].style.visi...2013-10-13
  • 连接MySql速度慢的解决方法(skip-name-resolve)

    最近在Linux服务器上安装MySql5后,本地使用客户端连MySql速度超慢,本地程序连接也超慢。 解决方法:在配置文件my.cnf的[mysqld]下加入skip-name-resolve。原因是默认安装的MySql开启了DNS的反向解析。如果禁用的话就不能...2015-10-21
  • C#方法的总结详解

    本篇文章是对C#方法进行了详细的总结与介绍,需要的朋友参考下...2020-06-25