最新消息:

PHP预定义变量

PHP学习笔记 admin 2377浏览 0评论

 

20130807211153

一、GET变量$_GET

$_GET变量是一个包含名称和值的数组,其中名称和值是通过HTTP GET请求方式发送的。使用HTTP GET请求方式发送的信息是可见的,他将显示在浏览器的地址栏里,并且有长度限制,不能超过100个字符。

20130808154504 20130808154538

二、POST变量$_POST

$_POST中存储的就是以HTTP POST方式提交的表单数据。

三、session变量

PHP session可以将客户的很多信息保存在服务器上。然而,session信息是临时存放的,当访问者离开这个网站时,其对应的session信息就会自动删除。如果想保存这些信息,后台程序可以将sesion数据保存到数据库中。

一个session靠一个唯一的session id来识别,这个session id可以包含在一个cookie中,也可以加在访问者的url中(其实只要服务器能够获取到客户端的session id即可)。出于安全方面的建议,一般将session id放在cookie中。

1、与session有关的PHP配置

在php.ini中有很多配置选项来配置PHP中关于session的属性。

20130808170239

2、使用session

在使用session之前,首先要调用session_start()函数打开一个session,session_start()可以创建或恢复基于当前session id的一个session,其中session id是通过GET、POST或cookie获得的。

若要设置配置文件中与session有关的选项,需要在session_start()函数之前调用ini_set()函数来设置,如下:

20130808175120

除了调用session_start()函数打开一个session以外,还可以通过配置php.ini中的session.auto_start =1 来打开自动session,让PHP在用户每次访问时自动打开一个session。

20130808175530

3、访问session中的数据

当调用session_start()后,$_SESSION变量就会被初始化为一个空数组,不包含任何字段和值。以后就可以像一个普通的数组一样进行赋值、读取等操作。

ps:在读取$_SESSION变量之前,出于安全考虑一般都要检查当前要读的值是否存在,如使用isset($_SESSION[‘name’])来检查$_SESSION[‘name’]是否存在

4、把数据从session中清除

$_SESSION本质上是一个数组,所以可以像数组那样写入和读取数据,因此要把数据从session中清除就可以像数组一样使用unset()函数。如unset($_SESSION[‘name’])就可以把$_SESSION[‘name’]从$_SESSION中清除了。

如果要结束当前的session则调用session_destory(),这个函数会清空当前会话中的所有资源,单数它不会清除与当前session有关的全局变量,也不会删除客户端的session cookie。由于PHP5的session是基于cookie的,如果要删除客户端cookie中的session,需要使用setcookie()函数。

四、cookie变量$_COOKIE

cookie是用户的一个身份凭证,主要用于验证用户的合法性,当然也可以用cookie存储其他信息。PHP使用预定义全局变量$_COOKIE来获取客户端发送的cookie信息。

服务端首先使用setcookie()函数来创建并设置客户端的cookie,然后每次使用预定义变量$_COOKIE来获取客户端发送的cookie的值。如果服务丢按想要删除客户端cookie,同样使用setcookie()函数。

1、与cookie有关的PHP配置

20130808214236

2、创建并为cookie赋值

20130808214602

ps:setcookie()函数的参数中除了name之外,其他所有参数都是可选的。可以用空字符串””替换某些参数以跳过该参数。因为expire参数是整形,不能用空字符串跳过,可以用零0来代替。

20130808215039

在服务器向客户端发送cookie值时,cookie值会自动用urlencode编码,然后在客户端接收到的时候自动解码。如果不想cookie值被urlencode编码,可以使用setrawcookie()函数来代替。

3、从cookie中获取数据

当服务端给客户端设置cookie后,客户端的每个请求中都会有未失效的cookie值,可以使用$_COOKIE数组来获取客户端发送的cookie值。与其他系统预定义变量一样,也可以在cookie中使用数组。如下:

20130808215842

4、清除cookie中数据

清除cookie中的数据和设置一样,都是通过setcookie()函数来实现。将setcookie函数的name参数设成要删除的cookie,然后将value参数设置成一个空字符串或FALSE,这样就能删除一个cookie值。

 

五、请求变量$_REQUEST

预定义全局变量$_REQUEST包含$_GET/$_POST和$_COOKIE中的全部内容。

六、HTTP文件上传变量$_FILES

客户端在浏览器上一般使用HTTP POST方法来上传文件(当然php5也支持put方式上传文件)。出于安全和方便的考虑,建议使用POST方法来上传文件。

20130808220954

ps:虽然上面表单提交方式是POST,由于sendfile的类型是file,所以提交的文件信息不会出现在$_POST中,即通过$_POST[‘sendfile’]不会获取到任何提交的文件信息。文件信息保存在$_FILES变量中。

20130809113519

ps:有两个位置可以限制表单上传文件大小,一个是在表单中设置MAX_FILE_SIZE,一个是在php.ini中设置upload_max_filesize选项。要注意的是这两个值的大小是不一样的,编写表单代码时设置的MAX_FILE_SIZE不能大于upload_max_filesize的值。这两个地方要做区分,因为后面介绍上传失败时,会有不同的错误代码。

错误代码的详细介绍如下:

20130809114327

ps:可以看出只要返回的错误码不是0,就说明文件上传出错了。

is_writeable()函数测试文件是否可写入。

语法: boolean is_writeable(string filename);

返回值: 布尔值

函数种类: 文件存取

 

内容说明

本函数返回 true 值则表示指定的 filename 存在并且可读取。参数 filename 也可以是目录名称,用来测试该目录是否可写入。返回值放在快取缓冲区中,参考 clearstatcache()

示例代码如下:

<?php
/*
 * Created on 2013-8-8
 *
 * To change the template for this generated file go to
 * Window - Preferences - PHPeclipse - PHP - Code Templates
 */
 	if (isset($_POST['submit']))
 	{
 		$store_dir='d:\\tmp\\';
 		$name=basename($_FILES['myfile']['name']); //获取文件名
 		$filepath=$store_dir.$name; //拼接出保存文件的路径
 		$tmp_name=$_FILES['myfile']['tmp_name'];//上传文件的临时名字
 		$err_code=$_FILES['myfile']['error'];  //错误码

 		if($err_code)
 		{
 			echo "上传文件发生错误,错误码为:".$err_code.'<br />';
 		}
 		if(!is_writeable($store_dir))
 		{
 			echo "目录不可写<br />";
 		}
 		if(is_uploaded_file($tmp_name)) //检查是否是上传文件
 		{
 			echo "文件校验成功<br />";
 		}
 		else
 		{
 			echo "文件校验失败,不是上传文件<br />";
 		}
 		if(move_uploaded_file($tmp_name,$filepath))
 		{
 			echo "文件移动成功</br>";
 		}
 		else
 		{
 			echo "文件移动失败</br>";
 		}
 	}
?>
<form action="" method="post" enctype="multipart/form-data">
	<input type="hidden" name="MAX_FILE_SIZE" value="300000">
	文件上传:
	<input type="file" name="myfile">
	<input type="submit" name="submit" value="上传">
</form>

上面的代码是上传一个问你件,下面介绍如何上传多个文件。上传多个文件的处理代码随form表单的不同而不同,有两种情况:

(1)上传的多个文件input控件的name属性使用一个二维数组表示

<form action="" method="post" enctype="multipart/form-data">
	<input type="hidden" name="MAX_FILE_SIZE" value="300000">
	文件1上传:
	<input type="file" name="myfile[]">
	文件2上传:
	<input type="file" name="myfile[]">
	<input type="submit" name="submit" value="上传">
</form>

即上传文件input控件的name属性使用的是一个数组。

20130809152657

(2)上传的多个文件input控件的name属性不同,即无任何关联。

<form action="" method="post" enctype="multipart/form-data">
	<input type="hidden" name="MAX_FILE_SIZE" value="300000">
	文件1上传:
	<input type="file" name="myfile1">
	文件2上传:
	<input type="file" name="myfile2">
	<input type="submit" name="submit" value="上传">
</form>

20130809152852

这两种情况对应的$_FILES变量会不同,因而获取上传文件属性的代码会不同,如下:

(1)上传的多个文件input控件的name属性使用一个二维数组表示

<?php
/*
 * Created on 2013-8-8
 *
 * To change the template for this generated file go to
 * Window - Preferences - PHPeclipse - PHP - Code Templates
 */
 	if (isset($_POST['submit']))
 	{
 		foreach($_FILES['myfile']['error'] as $key=>$value)
 		{
 			if (!$value)
 			{
 				echo "临时上传文件名:".$_FILES['myfile']['tmp_name'][$key]."<br />";
 				echo "上传文件大小:".$_FILES['myfile']['size'][$key]."<br />";
 			}
 		}
 		//或者下面这种方式逐个访问:
 		echo "临时上传文件名:".$_FILES['myfile']['tmp_name'][0]."<br />";
 		echo "临时上传文件名:".$_FILES['myfile']['tmp_name'][1]."<br />";

 	}
?>
<form action="" method="post" enctype="multipart/form-data">
	<input type="hidden" name="MAX_FILE_SIZE" value="300000">
	文件1上传:
	<input type="file" name="myfile[]">
	文件2上传:
	<input type="file" name="myfile[]">
	<input type="submit" name="submit" value="上传">
</form>

 

(2)上传的多个文件input控件的name属性无任何关联

<?php
/*
 * Created on 2013-8-8
 *
 * To change the template for this generated file go to
 * Window - Preferences - PHPeclipse - PHP - Code Templates
 */
 	if (isset($_POST['submit']))
 	{
 		$store_dir = 'd:\\tmp\\';
 		foreach ($_FILES as $key =>$file)
 		{
 			echo "上传文件中input标签的name属性为:".$key."的上传信息如下:<br />";
 			echo "临时文件名:".$file['tmp_name'].'<br />';
 			echo "文件名为:".$file['name'].'<br />';
 			echo "文件大小为:".$file['size'].'<br />';
 		}

 	}
?>
<form action="" method="post" enctype="multipart/form-data">
	<input type="hidden" name="MAX_FILE_SIZE" value="300000">
	文件1上传:
	<input type="file" name="myfile1">
	文件2上传:
	<input type="file" name="myfile2">
	<input type="submit" name="submit" value="上传">
</form>

<?php
/*
 * Created on 2013-8-8
 *
 * To change the template for this generated file go to
 * Window - Preferences - PHPeclipse - PHP - Code Templates
 */
 	if (isset($_POST['submit']))
 	{
 		echo "上传文件中input标签的name属性为:myfile1的上传信息如下:<br />";
		echo "临时文件名:".$_FILES['myfile1']['tmp_name'].'<br />';
		echo "文件名为:".$_FILES['myfile1']['name'].'<br />';
		echo "文件大小为:".$_FILES['myfile1']['size'].'<br />';

		echo "上传文件中input标签的name属性为:myfile2的上传信息如下:<br />";
		echo "临时文件名:".$_FILES['myfile2']['tmp_name'].'<br />';
		echo "文件名为:".$_FILES['myfile2']['name'].'<br />';
		echo "文件大小为:".$_FILES['myfile2']['size'].'<br />';

 	}
?>
<form action="" method="post" enctype="multipart/form-data">
	<input type="hidden" name="MAX_FILE_SIZE" value="300000">
	文件1上传:
	<input type="file" name="myfile1">
	文件2上传:
	<input type="file" name="myfile2">
	<input type="submit" name="submit" value="上传">
</form>

 

七、服务器信息变量$_SERVER

在网页应用程序开发过程中,有时需要获取诸如HTTP头信息、脚本路径以及各种服务器和客户端信息,这时需要用到全局变量$_SERVER.。$_SERVER数组中各个字段表示特定的信息,详细信息如下:

201308091542082013080915430020130809154341

如下:

20130809154535

 

 

 

 

 

转载请注明:jinglingshu的博客 » PHP预定义变量

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (1)

  1. session session_start() session_destroy() setcookie() is_writeable() basename() is_uploaded_file() move_uploaded_file() $_SERVER QUERY_STRING :客户端的查询语句,即第一个?之后的内容 REQUEST_URI:表示访问此页面的URI HTTP_ACCEPT:表示客户请求的Accept头部信息 HTTP_ACCEPT_CHARSET:表示请求的Accept-Charset头部信息 HTTP_HOST:表示请求的Host头部信息 HTTP_REFERER:头部中的Refer信息 HTTP_USER_AGENT:用户代理信息,即User_Agent头部信息 REMOTE_ADDR:表示正在浏览当前页面用户的IP地址 REMOTE_HOST:表示正在浏览当前页面用户的主机名 REMOTE_PORT:表示用户连接到服务器时所使用的端口
    admin12年前 (2013-09-02)回复