登录的时候报错
Warning: Cannot modify header information - headers already sent by (output started at D:\wamp\www\bbb\login.php:2) in D:\wamp\www\bbb\includes\login.func.php on line 36Warning: Cannot modify header information - headers already sent by (output started at D:\wamp\www\bbb\login.php:2) in D:\wamp\www\bbb\includes\login.func.php on line 37Warning: Cannot modify header information - headers already sent by (output started at D:\wamp\www\bbb\login.php:2) in D:\wamp\www\bbb\includes\global.func.php on line 40
global.func.php代码如下:
<?php
/**
* TestGuest Version1.0
* ================================================
* Copy 2010-2012 yc60
* Web: http://www.yc60.com
* ================================================
* Author: Lee
* Date: 2010-8-11
*//**
*_runtime()是用来获取执行耗时
* @access public 表示函数对外公开
* @return float 表示返回出来的是一个浮点型数字
*/
function _runtime() {
$_mtime = explode(' ',microtime());
return $_mtime[1] + $_mtime[0];
}/**
* _alert_back()表是JS弹窗
* @access public
* @param $_info
* @return void 弹窗
*/
function _alert_back($_info) {
echo "<script type='text/javascript'>alert('$_info');history.back();</script>";
exit();
}function _location($_info,$_url) {
if (!empty($_info)) {
echo "<script type='text/javascript'>alert('$_info');location.href='$_url';</script>";
exit();
} else {
header('Location:'.$_url);
}
}/**
* _login_state登录状态的判断
*/function _login_state() {
if (isset($_COOKIE['username'])) {
_alert_back('登录状态无法进行本操作!');
}
}
/**
* _session_destroy删除session
*/function _session_destroy() {
session_destroy();
}/**
* 删除cookies _unsetcookies()
*/function _unsetcookies() {
setcookie('username','',time()-1);
setcookie('uniqid','',time()-1);
_session_destroy();
_location(null,'index.php');
}
/**
*
*/function _sha1_uniqid() {
return _mysql_string(sha1(uniqid(rand(),true)));
}/**
* _mysql_string
* @param string $_string
* @return string $_string
*/function _mysql_string($_string) {
//get_magic_quotes_gpc()如果开启状态,那么就不需要转义
if (!GPC) {
return mysql_real_escape_string($_string);
}
return $_string;
}
/**
* _check_code
* @param string $_first_code
* @param string $_end_code
* @return void 验证码比对
*/function _check_code($_first_code,$_end_code) {
if ($_first_code != $_end_code) {
_alert_back('验证码不正确!');
}
}/**
* _code()是验证码函数
* @access public
* @param int $_width 表示验证码的长度
* @param int $_height 表示验证码的高度
* @param int $_rnd_code 表示验证码的位数
* @param bool $_flag 表示验证码是否需要边框
* @return void 这个函数执行后产生一个验证码
*/
function _code($_width = 75,$_height = 25,$_rnd_code = 4,$_flag = false) {
//创建随机码
for ($i=0;$i<$_rnd_code;$i++) {
$_nmsg .= dechex(mt_rand(0,15));
}
//保存在session
$_SESSION['code'] = $_nmsg;
//创建一张图像
$_img = imagecreatetruecolor($_width,$_height);
//白色
$_white = imagecolorallocate($_img,255,255,255);
//填充
imagefill($_img,0,0,$_white);
if ($_flag) {
//黑色,边框
$_black = imagecolorallocate($_img,0,0,0);
imagerectangle($_img,0,0,$_width-1,$_height-1,$_black);
}
//随即画出6个线条
for ($i=0;$i<6;$i++) {
$_rnd_color = imagecolorallocate($_img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
imageline($_img,mt_rand(0,$_width),mt_rand(0,$_height),mt_rand(0,$_width),mt_rand(0,$_height),$_rnd_color);
}
//随即雪花
for ($i=0;$i<100;$i++) {
$_rnd_color = imagecolorallocate($_img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
imagestring($_img,1,mt_rand(1,$_width),mt_rand(1,$_height),'*',$_rnd_color);
}
//输出验证码
for ($i=0;$i<strlen($_SESSION['code']);$i++) {
$_rnd_color = imagecolorallocate($_img,mt_rand(0,100),mt_rand(0,150),mt_rand(0,200));
imagestring($_img,5,$i*$_width/$_rnd_code+mt_rand(1,10),mt_rand(1,$_height/2),$_SESSION['code'][$i],$_rnd_color);
}
//输出图像
header('Content-Type: image/png');
imagepng($_img);
//销毁
imagedestroy($_img);
}
?>
Warning: Cannot modify header information - headers already sent by (output started at D:\wamp\www\bbb\login.php:2) in D:\wamp\www\bbb\includes\login.func.php on line 36Warning: Cannot modify header information - headers already sent by (output started at D:\wamp\www\bbb\login.php:2) in D:\wamp\www\bbb\includes\login.func.php on line 37Warning: Cannot modify header information - headers already sent by (output started at D:\wamp\www\bbb\login.php:2) in D:\wamp\www\bbb\includes\global.func.php on line 40
global.func.php代码如下:
<?php
/**
* TestGuest Version1.0
* ================================================
* Copy 2010-2012 yc60
* Web: http://www.yc60.com
* ================================================
* Author: Lee
* Date: 2010-8-11
*//**
*_runtime()是用来获取执行耗时
* @access public 表示函数对外公开
* @return float 表示返回出来的是一个浮点型数字
*/
function _runtime() {
$_mtime = explode(' ',microtime());
return $_mtime[1] + $_mtime[0];
}/**
* _alert_back()表是JS弹窗
* @access public
* @param $_info
* @return void 弹窗
*/
function _alert_back($_info) {
echo "<script type='text/javascript'>alert('$_info');history.back();</script>";
exit();
}function _location($_info,$_url) {
if (!empty($_info)) {
echo "<script type='text/javascript'>alert('$_info');location.href='$_url';</script>";
exit();
} else {
header('Location:'.$_url);
}
}/**
* _login_state登录状态的判断
*/function _login_state() {
if (isset($_COOKIE['username'])) {
_alert_back('登录状态无法进行本操作!');
}
}
/**
* _session_destroy删除session
*/function _session_destroy() {
session_destroy();
}/**
* 删除cookies _unsetcookies()
*/function _unsetcookies() {
setcookie('username','',time()-1);
setcookie('uniqid','',time()-1);
_session_destroy();
_location(null,'index.php');
}
/**
*
*/function _sha1_uniqid() {
return _mysql_string(sha1(uniqid(rand(),true)));
}/**
* _mysql_string
* @param string $_string
* @return string $_string
*/function _mysql_string($_string) {
//get_magic_quotes_gpc()如果开启状态,那么就不需要转义
if (!GPC) {
return mysql_real_escape_string($_string);
}
return $_string;
}
/**
* _check_code
* @param string $_first_code
* @param string $_end_code
* @return void 验证码比对
*/function _check_code($_first_code,$_end_code) {
if ($_first_code != $_end_code) {
_alert_back('验证码不正确!');
}
}/**
* _code()是验证码函数
* @access public
* @param int $_width 表示验证码的长度
* @param int $_height 表示验证码的高度
* @param int $_rnd_code 表示验证码的位数
* @param bool $_flag 表示验证码是否需要边框
* @return void 这个函数执行后产生一个验证码
*/
function _code($_width = 75,$_height = 25,$_rnd_code = 4,$_flag = false) {
//创建随机码
for ($i=0;$i<$_rnd_code;$i++) {
$_nmsg .= dechex(mt_rand(0,15));
}
//保存在session
$_SESSION['code'] = $_nmsg;
//创建一张图像
$_img = imagecreatetruecolor($_width,$_height);
//白色
$_white = imagecolorallocate($_img,255,255,255);
//填充
imagefill($_img,0,0,$_white);
if ($_flag) {
//黑色,边框
$_black = imagecolorallocate($_img,0,0,0);
imagerectangle($_img,0,0,$_width-1,$_height-1,$_black);
}
//随即画出6个线条
for ($i=0;$i<6;$i++) {
$_rnd_color = imagecolorallocate($_img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
imageline($_img,mt_rand(0,$_width),mt_rand(0,$_height),mt_rand(0,$_width),mt_rand(0,$_height),$_rnd_color);
}
//随即雪花
for ($i=0;$i<100;$i++) {
$_rnd_color = imagecolorallocate($_img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
imagestring($_img,1,mt_rand(1,$_width),mt_rand(1,$_height),'*',$_rnd_color);
}
//输出验证码
for ($i=0;$i<strlen($_SESSION['code']);$i++) {
$_rnd_color = imagecolorallocate($_img,mt_rand(0,100),mt_rand(0,150),mt_rand(0,200));
imagestring($_img,5,$i*$_width/$_rnd_code+mt_rand(1,10),mt_rand(1,$_height/2),$_SESSION['code'][$i],$_rnd_color);
}
//输出图像
header('Content-Type: image/png');
imagepng($_img);
//销毁
imagedestroy($_img);
}
?>
是说在 D:\wamp\www\bbb\login.php 第2行发现有输出
这是login.php的代码:<?php
/**
* TestGuest Version1.0
* ================================================
* Copy 2010-2012 yc60
* Web: http://www.yc60.com
* ================================================
* Author: Lee
* Date: 2010-8-21
*/
session_start();
//定义个常量,用来授权调用includes里面的文件
define('IN_TG',true);
//定义个常量,用来指定本页的内容
define('SCRIPT','login');
//引入公共文件
require dirname(__FILE__).'/includes/common.inc.php';
//登录状态
_login_state();
//开始处理登录状态
if ($_GET['action'] == 'login') {
//为了防止恶意注册,跨站攻击
_check_code($_POST['code'],$_SESSION['code']);
//引入验证文件
include ROOT_PATH.'includes/login.func.php';
//接受数据
$_clean = array();
$_clean['username'] = _check_username($_POST['username'],2,20);
$_clean['password'] = _check_password($_POST['password'],6);
$_clean['time'] = _check_time($_POST['time']);
//到数据库去验证
if (!!$_rows = _fetch_array("SELECT tg_username,tg_uniqid FROM tg_user WHERE tg_username='{$_clean['username']}' AND tg_password='{$_clean['password']}' AND tg_active='' LIMIT 1")) {
_close();
_session_destroy();
_setcookies($_rows['tg_username'],$_rows['tg_uniqid'],$_clean['time']);
_location(null,'index.php');
} else {
_close();
_session_destroy();
_location('用户名密码不正确或者该账户未被激活!','login.php');
}
}
?>
<!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 http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>多用户留言系统--登录</title>
<?php
require ROOT_PATH.'includes/title.inc.php';
?>
<script type="text/javascript" src="js/code.js"></script>
<script type="text/javascript" src="js/login.js"></script>
</head>
<body>
<?php
require ROOT_PATH.'includes/header.inc.php';
?><div id="login">
<h2>登录</h2>
<form method="post" name="login" action="login.php?action=login">
<dl>
<dt></dt>
<dd>用 户 名:<input type="text" name="username" class="text" /></dd>
<dd>密 码:<input type="password" name="password" class="text" /></dd>
<dd>保 留:<input type="radio" name="time" value="0" checked="checked" /> 不保留 <input type="radio" name="time" value="1" /> 一天 <input type="radio" name="time" value="2" /> 一周 <input type="radio" name="time" value="3" /> 一月</dd>
<dd>验 证 码:<input type="text" name="code" class="text code" /> <img src="code.php" id="code" /></dd>
<dd><input type="submit" value="登录" class="button" /> <input type="button" value="注册" id="location" class="button location" /></dd>
</dl>
</form>
</div><?php
require ROOT_PATH.'includes/footer.inc.php';
?>
</body>
</html>