PHP5.3 命名空间namespace 翻译
PHP中的命名空间用来解决大型PHP库(libraries)中作用域的问题,在PHP中,所有的类定义都是全局的,所以,当一个库的作者为这处库创建多种应用或公共API类的时候,他必须清楚其他库中相似功能是否存在的可能性并因而选择唯一的名称,来保证这些库可以被同时使用.通常用唯一的字符串加前缀的方法来解决,如数据库类被冠以My_Library_DB,等等.当这个库增加的时候,前缀也随着增加,这样导致很长的名字.命名空间使开发者在每次引用类的时候不使用长名称即可管理命名范
围.
定义
命名空间在每一个文件的开头以namespace 关键字来声明,如
<?php
namespace MyProject::DB;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
?>
相同的namespace 名称可以在多个文件中使用
namespace 包class,constant和function定义,但无free code
详解:
在命名空间内部,所有定义的class,function和constant名称被自动冠以命名空间名称,类名总是完整的名称,如,以上例子中的类使用MyProject::DB::Connection
来调用
创建的常量,名称是由命名空间名加上常量名,象类常量、命名空间常量只能为静态常量。
非完整修饰名(如名称不包含::),遵循如下:
非自动加载类在当前命名空间(冠以命名空间名称的)中查找
非自动加载全局命名空间中查找
Autoloading for name in current namespace is attempted.
如前者查找失败,则查找失败
非完整修饰函数名称(如名称不包含::)先在当前命名空间查找再在全局空间中查找
非完整修饰常量名称称在当前命名空间中查找再在全局定义的常量里查找
使用命名空间
每一个命名空间里的类和函数可使用全名来引用,如,MyProject::DB::Connection ,或MyProject::DB::Connection
<?php
require 'MyProject/Db/Connection.php';
$x = new MyProject::DB::Connection;
MyProject::DB::connect();
?>
命名空间可以使用use操作符来引入到当前上下文(全局或命名空间)中,这个操作符参数如下:
<?php
/* ... */
use Some::Name as Othername;
// 简化应用
use Foo::Bar;
// 与其相同
use Foo::Bar as Bar;
?>
引入的名称工作如下:每次当解释器遇到局部名称Othername(单一名称或被::分隔的长名称),引入的名称Some::Name被替代
use只能用于全局范围内,非函数或类中,引入的名称从引入开始到当前文件结尾有效,推荐在文件最开始引入以避免冲突
<?php
require 'MyProject/Db/Connection.php';
use MyProject::DB;
use MyProject::DB::Connection as DbConnection;
$x = new MyProject::DB::Connection();
$y = new DB::connection();
$z = new DbConnection();
DB::connect();
?>
全局空间
没有命名空间定义时,所有的类和函数都被放在全局空间内,因为在PHP支持命名空间前就是这样的.
在命名空间上下文中,被冠以::将指定来自全局空间里该名称
<?php
namespace A::B::C;
/* 此函数为 A::B::C::fopen */
function fopen() {
/* ... */
$f = ::fopen(...); // 全局函数
return $f;
}
?>
__NAMESPACE__
解释期间的常量__NAMESPACE__被定义为当前命名空间的名称,在命名空间外部,这个常量值为空字符串.
<?php
namespace A::B::C;
function foo() {
// do stuff
}
set_error_handler(__NAMESPACE__ . "::foo");
?>
规则
1.所有完整修饰名通过当前引入规则转化,如A::B::C已引入,C::D::E()被转化为A::B::C::D::e().
2.非完整修饰名通过当前引入规则转化(全名替换简名),如A::B::C已引入,new C()被转化为A::B::C().
3.在命名空间内部,调用当前命名空间内定义的非完整修饰函数名,在解释期间被认为是调用这些命名空间的函数
4.在命名空间内部(A::B),调用在当前命名空间内没有定义的非完整修饰名函数在运行期间被决定,以下是Foo()如何被决定
在当前命名空间内寻找函数A::B::foo().
尝试寻找和调用内部(internal)函数foo()
调用全局空间内用户定义的函数,使用::foo()
5.在命名空间内部(A::B),调用在当前命名空间内没有定义的非完整修饰名类在运行期间被决定,以下是 new C() 如何被决定.
在当前命名空间A::B::C中寻找类
尝试寻找和调用内部类C
尝试自动加载A::B::C
调用全局空间内用户自定义的类,使用new ::c()
6.调用完整修饰名的函数在运行期间被决定.以下是A::B::foo() 如何被决定
在当前命名空间内寻找函数A::B::foo().
调用全局空间内用户定义的函数,使用::foo()
7.调用完整修饰名的类的时候,是在运行的时候才按照想对应的命名空间来加载。比如 new A::B::C() 它是引用 命名空间是A::B下的C() 类
<?php
namespace A;
// 函数调用
foo(); // 先尝试调用命名空间A里定义的"foo
// 再调用内部(internal)函数 "foo"
::foo(); // 调用全局范围内定义的"foo"
// 类引用
new B(); // 先尝试创建在命名空间A定义的B类的对象
// 再创建内部类B对象
new ::B(); //新建全局域定义的B类的对象
// 来自其他命名空间的静态方法/命名空间
B::foo(); //先尝试调用来自命名空间"A::B"的函数foo()
// 再调用内部类B的函数foo()
::B::foo(); //先尝试调用来自命名空间B的函数FOO()
//再调用全局域里B里的函数FOO()
//当前命名空间的静态方法/命名空间
A::foo(); //先调用命名空间"A::A" 里的函数FOO()
// 再调用命名空间A里A类的函数foo()
// 再尝试调用命名空间A里函数foo()
// 再调用内部类A里的函数foo()
::A::foo(); // 先尝试调用命名空间A里函数foo()
// 再调用全局域里A类的函数foo()
?>
下面简单介绍这两个函数的用法:
string addcslashes(string str,string charlist):第1个参数str为待失物原始字符串,第2个参数charlist说明需要在原始串的哪些字符前加上字符“”。
string stripcslashes(string str):去掉字符串中的“”。
例:
<?php
$sql = "update book set bookname='let's go' where bookid=1";
echo $sql."<br>";
$new_sql = addcslashes($sql,"'");
echo $new_sql."<br>"; //update book set bookname='let's go' where bookid=1
$new_sql_01 = stripcslashes($new_sql);
echo $new_sql_01; //update book set bookname='let's go' where bookid=1
?>
好了,其它的都快完了我们就来看看index.php文件显示留方的页面吧.
<?php
@session_start();
include("global.php");
if(isset($_GET['act']) && $_GET['act'] == 'del')
{
if(isset($_GET['mid']))
{
$mid = intval($_GET['mid']);
if(mysql_query("DELETE FROM xx_guestbook WHERE mid={$mid}"))
{
echo("delete OK!");
die("<script>window.location.href='{$_SERVER['PHP_SELF']}';</script>");
//echo "<meta http-equiv=\"refresh\" content=\"1; url=index.php\">";
}
else echo("false");
}
}
?>
<!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>
<style type="text/css">
<!--
body {
background: #C7EDDD;
text-align: center;
margin: 0px;
padding: 0px;
font-size: 12px;
}
a {
text-decoration: none;
margin: 0px;
padding: 0px;
}
.messagebox img {
margin: 0px;
padding: 0px;
}
.all {
margin: 0px auto;
padding: 0px 0px 10px;
width: 780px;
background: #C7EDCC;
text-align: left;
}
.header {
margin: 0px;
padding: 0px;
height: 90px;
background: #DDDDDD;
border-top: 5px solid #660066;
border-right: 1px solid #660066;
border-bottom: 1px solid #660066;
border-left: 1px solid #660066;
}
.header h1 {
font-size: 36px;
font-weight: bold;
margin: 0px;
padding: 5px 10px 0px;
}
.header #menu {
margin: 0px;
padding: 25px 10px 0px;
height: 20px;
font-size: 14px;
font-weight: bold;
text-align: right;
}
.messagebox {
margin: 20px 10px 0px;
padding: 0px 0px 5px;
width: 760px;
border: 1px solid #33FFFF;
background: #C7EDCC;
}
.messagebox a {
text-decoration: none;
margin: 0px;
padding: 0px;
}
.messagebox-top {
border-bottom: 1px dashed #00FFFF;
margin: 0px;
padding: 3px 0px 0px;
height: 20px;
background: #CCFFFF;
}
.messagebox-topl {
margin: 0px 0px 0px 10px;
padding: 0px;
float: left;
}
.messagebox-topr {
margin: 0px 5px 0px 0px;
padding: 0px;
float: right;
}
.messagebox-topc {
margin: 1px;
padding: 0px 20px;
}
.messagebox-show {
margin: 5px 10px 0px;
padding: 3px 3px 5px;
overflow: hidden;
border: 1px solid #00FFCC;
}
.messagebox-reply {
border-top: 1px dashed #00FFCC;
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
border-right-style: dashed;
border-bottom-style: dashed;
border-left-style: dashed;
margin: 2px 10px 0px;
padding: 2px 2px 5px;
background: #E0EDDC;
}
.messagebox-replyt {
font-weight: bold;
color: #0000FF;
margin: 0px 0px 5px;
padding: 0px;
}
.pages {
background: #00FFFF;
margin: 5px 20px 0px;
padding: 0px 0px 5px;
}
.foot {
background: #E0EDDC;
margin: 5px 0px 0px;
padding: 5px;
text-align: center;
}
-->
</style>
</head>
<body>
<div class="all">
<div class="header">
<h1>求职留言本</h1>
<div id="menu"><a href="index.php">首页</a> <a href="madd.php">发表留言</a><?php
if(!$_SESSION[user])
echo "<a href=\"login.php\">登陆</a>";
if($_SESSION[user])
echo "<a href=\"logout.php\">退出</a>";
?>
</div>
<!-- menu -->
</div><!-- header -->
<?php
$page = isset($_GET['page'])?intval($_GET['page']):1;
$num=10;
$total=mysql_num_rows(mysql_query("select * from xx_guestbook"));
$pagenum=ceil($total/$num);
if($page>$pagenum || $page<=0 || empty($page))
{
//header("location:index.php?page=1"); DEBUG
$page = 1;
}
$offset=($page-1)*$num;
$sql = "SELECT * FROM xx_guestbook ORDER BY posttime DESC LIMIT {$offset},{$num}";
$query = mysql_query($sql);
while($info = mysql_fetch_array($query))
{
?>
<div class="messagebox">
<div class="messagebox-top"><span class="messagebox-topl"><strong><a href="#"><a href="#"><?php echo("{$info['username']}"); ?> </a></strong>发表于 <?php echo("{$info['posttime']}"); ?></span> <span class="messagebox-topr"><a href="#"><img src="images/city.gif" alt="IP:<?php echo("{$info['ip']}"); ?>" /></a> <a href="mailto:<?php echo("{$info['email']}"); ?>"><img src="images/email2.gif" alt="给TA发email:<?php echo("{$info['email']}"); ?>" /></a> <a href="tencent://message/?uin=<?php echo("{$info['oicq']}"); ?>&Site=web&Menu=yes"><img src="images/qq.gif" alt="QQ:<?php echo("{$info['oicq']}"); ?>" /></a> <a href="<?php echo("{$info['weburl']}"); ?>" target="_blank"><img src="images/web.gif" alt="主页:<?php echo("{$info['weburl']}"); ?>" /></a></span>
<?php
if($_SESSION[user])
{
?>
<span class="messagebox-topc"><strong><a href="mreply.php?act=edit&mid=<?php echo("{$info['mid']}"); ?>">编辑回复</a> <a onclick="var r=confirm("确认删除吗?")
if (r==true)
{
window.location.href='<?php $_SERVER['PHP_SELF']; ?>?act=del&mid=<?php echo("{$info['mid']}"); ?>';
}
else
{
window.location.href='<?php $_SERVER['PHP_SELF']; ?>';
}" href="#">删除</a></strong></span>
<?php
}
?>
</div>
<!-- messagebox-top -->
<div class="messagebox-show"><?php echo("{$info['content']}"); ?></div>
<!-- messagebox-show -->
<?php
if(!empty($info['reply']))
{
?>
<div class="messagebox-reply">
<div class="messagebox-replyt">admin回复于:<?php echo("{$info['replytime']}"); ?></div>
<?php echo("{$info['reply']}"); ?></div>
<?php
}
?>
<!-- messagebox-reply -->
</div>
<!-- messagebox -->
<?php
}
$prepage = $page - 1;
$nextpage = $page + 1;
?>
<div class="pages">共 <strong><?php echo("$pagenum"); ?></strong> 页 当前第 <strong><?php echo("$page"); ?></strong> 页 <a href="index.php?page=1">第一页</a> <a href="index.php?page=<?php echo("$prepage"); ?>">上一页</a> <a href="index.php?page=<?php echo("$nextpage"); ?>">下一页</a> <a href="index.php?page=<?php echo("$pagenum"); ?>">最后一页</a> </div><!-- pages -->
<div class="foot">
菜根 <br />
Copyright © 菜根 xanxin <a href="http://phpvc.com">http://phpvc.com</a> </div>
<!-- foot -->
</div>
<!-- all -->
</body>
</html>
显示了当然会有留言页面喽,如下.
<?php
@session_start();
include("global.php");
//获得IP地址 来自sablogX 1.6
if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
$onlineip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
$onlineip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
$onlineip = getenv('REMOTE_ADDR');
} elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
$onlineip = $_SERVER['REMOTE_ADDR'];
}
$onlineip = addslashes($onlineip);
if($_POST['add'] == 'add')
{
$username = $_POST['username'];
$username = htmlspecialchars($username);
$username = trim($username);
$qq = $_POST['qq'];
$email = $_POST['email'];
$email = htmlspecialchars($email);
$weburl = $_POST['weburl'];
$weburl = htmlspecialchars($weburl);
$content = $_POST['content'];
$ip = $onlineip;//$_SERVER['REMOTE_ADDR'];
$posttime = date('Y-m-d H:i:s');
$content = htmlspecialchars($content);
$content = str_replace(""," ",$content);
$content = str_replace(" "," ",$content);
$content = str_replace("\n","<br />",$content);
$sql = "INSERT INTO xx_guestbook(username,email,weburl,oicq,content,posttime,ip) VALUES('$username','$email','$weburl','$qq','$content','$posttime','$ip')";
if(mysql_query($sql))
{
echo("post OK!");
die("<script>window.location.href='lyb.php';</script>");
//echo "<meta http-equiv=\"refresh\" content=\"1; url=index2.php\">";
}
else
{
echo"false!";
}
}
else
{
?>
<!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>
<style type="text/css">
<!--
body {
font-size: 12px;
background: #FAFCFF;
}
-->
</style>
<script language=JavaScript>
function FrontPage_Form1_Validator(theForm)
{
if (theForm.username.value == "")
{
alert("请填写昵称!");
history.back();
theForm.username.focus();
return (false);
}
if (theForm.username.value.length<3)
{
alert("昵称至少应为3个字符!");
theForm.username.focus();
return (false);
}
if (theForm.username.value.length>15)
{
alert("昵称不能大于15个字符!");
theForm.username.focus();
return (false);
}
if(theForm.email.value!=""){
var email1 = theForm.email.value;
var pattern = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;
flag = pattern.test(email1);
if(!flag){
alert("邮件地址格式不对!");
theForm.email.focus();
return false;
}
}
if(theForm.qq.value!="")
{
for (i=1;i<theForm.qq.value.length;i++){
ct=theForm.qq.value.charAt(i);
if (!(ct>='0'&&ct<='9'))
{
alert("QQ号码只允许输入0-9数字");
theForm.qq.focus();
return(false);
}
}
}
if (theForm.content.value == "")
{
alert("留言内容不能空!");
theForm.content.focus();
return (false);
}
if (theForm.content.value.length<5)
{
alert("留言内容最少5个字符!");
theForm.content.focus();
return (false);
}
if (theForm.weburl.value != "")
{
var weburl = theForm.weburl.value;
var Expression = /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w-.\/?%&=]*)?/;
var objExp = new RegExp(Expression);
if(objExp.test(weburl) != true)
{
alert("url地址格式不对!");
theForm.weburl.focus();
return false;
}
}
return (true);
}
</script>
</head>
<body>
<table width="681" border="0" cellspacing="0" cellpadding="0" align="center">
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="message" id="message" onsubmit="return FrontPage_Form1_Validator(this)">
<tr>
<td height="25" colspan="2" align="center"><strong>发表留言(带*为必填)</strong></td>
</tr>
<tr>
<td width="109" height="25" align="right">呢称: </td>
<td width="572" height="25"><label>
<input name="username" type="text" class="input" id="username" value="<?php
if($_SESSION[user])
echo "{$_SESSION[user]}";
?>" />
<font color="#000000">*</font>(<font color="#ff6600">*</font>为必填项)</label></td>
</tr>
<tr>
<td height="25" align="right">QQ: </td>
<td height="25"><label>
<input name="qq" type="text" class="input" id="qq" />
(纯数字)</label></td>
</tr>
<tr>
<td height="25" align="right">E-mail: </td>
<td height="25"><label>
<input name="email" type="text" class="input" id="email" size="30" />
(必须含有@)</label></td>
</tr>
<tr>
<td height="25" align="right">个人主页(blog): </td>
<td height="25"><label>
<input name="weburl" type="text" class="input" id="weburl" size="30" />
(以http://开关)</label></td>
</tr>
<tr>
<td height="25" align="right">内容: </td>
<td height="25"><label>
<textarea name="content" cols="70" rows="15" class="input" id="content"></textarea>
<font color="#000000">*</font></label></td>
</tr>
<tr>
<td height="25"> </td>
<td height="25"><label>
<input name="submit" type="submit" class="botton" id="submit" value="发表留言" />
<input name="reset" type="reset" class="botton" value="重新填写" id="reset" />
<input name="add" type="hidden" id="add" value="add" />
</label></td>
</tr>
</form>
</table>
</body>
</html>
<?php
}
?>
OK了简单的留言系统就OK了.
好了现在我们来看login.php文件的程序代码吗.
<?php
session_start();
include("global.php");
if(isset($_POST['username']) && isset($_POST['pwd']))
{
$result = mysql_query("SELECT * FROM xx_admin");
if($info = mysql_fetch_array($result))
{
if($_POST['username'] == $info['username'] && $info['password'] == md5($_POST['pwd']))
{
$_SESSION[user] = $info['username'];
echo("login OK!");
die("<script>window.location.href='index.php';</script>");
}
else echo("<script>window.alert('登陆失败!');window.location.href='".$_SERVER['PHP_SELF']."';</script>");
}
}
?>
<!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>
<style type="text/css">
<!--
body {
background: #EAF4FF;
font-size: 12px;
}
-->
</style>
</head>
<body>
<table width="240" border="0" cellspacing="0" cellpadding="0" align="center">
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="login" id="login">
<tr>
<td height="25"></td>
<td height="25"><strong>管理登录</strong></td>
</tr>
<tr>
<td width="59" height="25" align="right">用户名: </td>
<td width="181" height="25"><label>
<input name="username" type="text" class="loginput" id="username" value="" />
</label></td>
</tr>
<tr>
<td height="25" align="right">密 码: </td>
<td height="25"><label>
<input name="pwd" type="password" class="loginput" id="pwd" />
</label></td>
</tr>
<tr>
<td height="25"> </td>
<td height="25"><label>
<input name="Submit" type="submit" class="botton" value="登 录" />
</label></td>
</tr>
</form>
</table>
</body>
</html>
登陆后就可以看到留言的了就会用mreplay.php进行回答网友的问题.代码如下.
<?php
session_start();
include("global.php");
if(!$_SESSION[user])
die("<script>window.alert('请先登陆!');window.location.href='login.php';</script>");
if(isset($_GET['act']) && $_GET['act']=='reply')
{
$content = $_POST['reply'];
$content = str_replace(""," ",$content);
$content = str_replace(" "," ",$content);
$content = str_replace("\n","<br />",$content);
$sql = "UPDATE xx_guestbook SET reply = '{$content}',replytime = '".date('Y-m-d H:i:s')."' WHERE mid = ".intval($_GET['mid']);
//echo $sql;
$row=mysql_query($sql);
if($row)
{
echo("reply OK!");
die("<script>window.location.href='lyb.php';</script>");
}
else echo("false");
}else
if(isset($_GET['act']) && $_GET['act'] == 'edit')
{
if(isset($_GET['mid']))
{
$mid = intval($_GET['mid']);
$row=mysql_query("SELECT * FROM xx_guestbook WHERE mid = {$mid}");
if($row)
{
$rs=mysql_fetch_array($row);
//print_r($rs); DEBUG
//echo "<meta http-equiv=\"refresh\" content=\"1; url=index2.php\">";
$reply = $rs['reply'];
$reply = str_replace("<br />","\n",$reply);
//$reply = str_replace(" ","",$reply);
//$reply = str_replace(" ","",$content);
//$reply = str_replace("<br />","",$reply);
}
else echo("false");
}
?>
<!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>
</head>
<body>
<table width="500" border="0" cellspacing="0" cellpadding="0" align="center">
<form action="<?php $_SERVER['PHP_SELF']; ?>?act=reply&mid=<?php echo("{$rs['mid']}");?>" method="post" name="message" id="message">
<tr>
<td height="25" align="center"><strong>回复留言<?php echo $_GET['mid']; ?></strong></td>
</tr>
<tr>
<td height="25" align="center"><label>
<textarea name="reply" cols="70" rows="15" class="input" id="reply"><?php echo $reply; ?></textarea>
</label></td>
</tr>
<tr>
<td height="25" align="center"><label>
<input name="Submit" type="submit" class="botton" value="回复留言" />
</label></td>
</tr>
</form>
</table>
</body>
</html>
<?php
}
?>
作留言板我们来看看下面图片上的文件是指那些吧,
global.php是全局文件有数据链接代码.index.php是显示文件不用多说了下面有讲解的,login.php登录文件,logout.php退出登录,madd.php 增加留言,mreplay.php回答留言,好了我们先来看看global.php文件的代码吧.
<?php
@header("content-Type: text/html; charset=UTF-8");
$dbhost = 'localhost';//数据库服务器
$dbuser ='root';//数据库用户名
$dbpwd = '';//数据库密码
$dbname = 'demo_gb';//数据库名
$db=mysql_connect($dbhost,$dbuser,$dbpwd) or die('为能连接数据库。');
mysql_select_db($dbname,$db) or die('不能连接数据库。');
mysql_query("set names 'utf8'");
?>
这全是数据库连接函数哦.
现在看logout.php这里把sesson删除就OK了.代码如下.
<?php
@header("content-Type: text/html; charset=UTF-8");
session_start();
if(session_destroy())
{
echo("out OK!");
//window.alert('退出成功!')
die("<script>;window.location.href='index.php';</script>");
}
else echo "out false please go back";
//header("location:index2.php");
?>
相关文章
- 这篇文章主要介绍了解决IDEA占用C盘空间过大的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-22
- 这篇文章主要给大家介绍了关于Swift中命名空间的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-30
- 这篇文章主要介绍了c# 如何使用 My 命名空间,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2020-12-08
- 这篇文章主要介绍了C# 命名空间(Namespace)的相关知识,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以参考下...2020-11-03
- 今天小编就为大家分享一篇关于C++与namespace有关的两个编译错误的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...2020-04-25
- 这篇文章主要介绍了Redis swap空间的使用示例,帮助大家更好的理解和学习使用Redis数据库,感兴趣的朋友可以了解下...2021-03-25
- namespace即“命名空间”,也称“名称空间” 、”名字空间”。接下来通过本文给大家介绍JavaScript中命名空间namespace模式的相关知识,非常不错,具有参考借鉴价值,感兴趣的朋友一起学习吧...2016-06-24
- 这篇文章主要介绍了Redis开启键空间通知实现超时通知的步骤,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-01-15
- PHP的命名空间(namespace)是php5.3之后才有的之前学习php所以没有这个东西了,最近用到了php命名空间了,下面我们一起来看看命名空间namespace用法 现在说这个,感觉有...2016-11-25
- 这篇文章主要介绍了Oracle如何设置表空间数据文件大小,文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-22
- .net的命名空间类库的简单介绍,需要的朋友可以参考一下...2020-06-25
- 今天小编在这里就来给美图秀秀的这一款软件的使用者们来说一下制作QQ空间MM签名的教程,各位想知道具体制作步骤的使用者们,那么下面就快来跟着小编一起看一下吧。 ...2016-09-14
- 当一个项目变得大型之后,我们会引入很多的库,这么一来两个库很可能会定义List、Tree、Node同名的类,编译器要是不考虑这情况的话,程序员调用时就会出现冲突问题。C++提供了名称空间工具,以更好的控制名称的作用域,本文就来谈谈C++ 名称空间,需要的朋友可以参考一下...2021-09-24
- 这篇文章主要介绍了Java中XML Namespace 命名空间,XML命名空间是由国际化资源标识符 (IRI) 标识的 XML 元素和属性集合,该集合通常称作 XML“词汇”,对XML Namespace 命名空间相关知识感兴趣的朋友一起看看吧...2021-08-14
- 集合是一些有共同特征的独立数据项组成的,通过集合,我们可以可以使用相同的调用代码来处理一个集合的所有元素,而不用单独处理每一个单独的项...2021-09-22
- 小米手机云空间不足怎么办?使用小米云空间存储照片,视频等,最近发现空间不够用了,估计是视频存的太多了,该怎么办呢?今天和大家分享一下解决小米云空间不足的详细教程,需要的朋友可以参考下...2016-07-04
- 这篇文章主要介绍了C#命名空间与java包的区别,较为详细的分析了C#命名空间与java包的相同点与不同点,非常具有实用价值,需要的朋友可以参考下...2020-06-25
- php有namespace或类似的东西的。对于发布类库框架,或者构建大的程序来说是很重要的。可以避免类名和函数名冲突,又不用像Pear里那样把类名弄得老长。当初php5的测试版曾...2016-11-25
- 这篇文章主要介绍了C++编程中的命名空间基本知识讲解,包括对C++11中内联命名空间新特性的介绍,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了解决ASP.NET MVC 重命名(命名空间)而导致错误的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25