Home > php教程 > php手册 > PHP exit()函数相关

PHP exit()函数相关

WBOY
Release: 2016-06-13 09:38:45
Original
926 people have browsed it

今天遇到一个问题,运行下面代码时报错。

<?php
session_start();
if(!isset($_SESSION['user']) || null === $_SESSION['user'])
{
    header('location:login.php');
    exit;
}
?>
Copy after login

错误信息为:

    
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at D:\PHPProjects\agilelite\index.php:1) in D:\PHPProjects\agilelite\index.php on line 2
Warning: Cannot modify header information - headers already sent by (output started at D:\PHPProjects\agilelite\index.php:1) in D:\PHPProjects\agilelite\index.php on line 6
Copy after login

为了解决这个问题,研究一下exit这个函数的用法。

return、break和contiue是语言结构,就如同if语句之类的,但是exit却是个函数。exit函数的作用是输出一则消息并且终止当前脚本。

如果一段文本中包括多个以结束的脚本,则exit退出当前所在脚本。

比如一篇php文本包括一下代码,则输出为 NowaMagic。

<?php
	echo "Hello";
	exit;
?>
<?php
	echo "NowaMagic";
?>
Copy after login

exit函数语法格式如下(void表示没有返回值):

void exit ([ string $status ] )
void exit ( int $status )
Copy after login

如果status是一段字符串,这个函数在脚本退出前打印status。

如果status是一个整数,这个整数会被作为退出状态。退出状态应该从0到254,退出状态255被PHP保留并禁止使用。状态0被用来表示成功的终止程序。

在header跳转后使用exit

PHP的header可以输出http头部信息,前提是,在header之前不能输出任何内容,因为所有的内容都作为http的body输出给客户端了,一旦有body的内容,就不可能再添加任何head部分的信息。

header函数的一个常用的方式就是用来做转向,redirect。

比如,我需要转到某个地址,只要执行下述代码:

<?php
	header('Location: http://www.bkjia.com/');
?>
Copy after login

浏览器会收到一个302的http状态码,告诉他这个内容已经被转移了。

重要的是,php会在调用header函数后,继续执行后面的代码,你可以用我的代码亲自试验一下:

<?php
header('Location: http://www.bkjia.com/');
$fp	= fopen('header.txt', 'w+');
fwrite($fp, date('Y-m-d H:i:s'));
?>
Copy after login

肯定会执行到fwrite函数的,打开header.txt文件,检查时间!

对此,解决的办法是,要在每一个header函数后面加上exit,保证当前页面停止执行,进而转向location指定的地址。

为了避免到处都是exit,可以写一个专门用作转向的函数,比如:

<?php
function DoRedirect($strUrl) {
	header('Location: ' . $strUrl);
	exit;
}
?>
Copy after login

另,为了避免在header之前输出body的内容,许多php框架都采用了php页面尾部不写?>的方式,因为有些人总习惯在?>后面添加一个换行,这真的是个不好的习惯。

Related labels:
php
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template