一、GET变量$_GET
$_GET变量是一个包含名称和值的数组,其中名称和值是通过HTTP GET请求方式发送的。使用HTTP GET请求方式发送的信息是可见的,他将显示在浏览器的地址栏里,并且有长度限制,不能超过100个字符。
二、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的属性。
2、使用session
在使用session之前,首先要调用session_start()函数打开一个session,session_start()可以创建或恢复基于当前session id的一个session,其中session id是通过GET、POST或cookie获得的。
若要设置配置文件中与session有关的选项,需要在session_start()函数之前调用ini_set()函数来设置,如下:
除了调用session_start()函数打开一个session以外,还可以通过配置php.ini中的session.auto_start =1 来打开自动session,让PHP在用户每次访问时自动打开一个session。
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配置
2、创建并为cookie赋值
ps:setcookie()函数的参数中除了name之外,其他所有参数都是可选的。可以用空字符串””替换某些参数以跳过该参数。因为expire参数是整形,不能用空字符串跳过,可以用零0来代替。
在服务器向客户端发送cookie值时,cookie值会自动用urlencode编码,然后在客户端接收到的时候自动解码。如果不想cookie值被urlencode编码,可以使用setrawcookie()函数来代替。
3、从cookie中获取数据
当服务端给客户端设置cookie后,客户端的每个请求中都会有未失效的cookie值,可以使用$_COOKIE数组来获取客户端发送的cookie值。与其他系统预定义变量一样,也可以在cookie中使用数组。如下:
4、清除cookie中数据
清除cookie中的数据和设置一样,都是通过setcookie()函数来实现。将setcookie函数的name参数设成要删除的cookie,然后将value参数设置成一个空字符串或FALSE,这样就能删除一个cookie值。
五、请求变量$_REQUEST
预定义全局变量$_REQUEST包含$_GET/$_POST和$_COOKIE中的全部内容。
六、HTTP文件上传变量$_FILES
客户端在浏览器上一般使用HTTP POST方法来上传文件(当然php5也支持put方式上传文件)。出于安全和方便的考虑,建议使用POST方法来上传文件。
ps:虽然上面表单提交方式是POST,由于sendfile的类型是file,所以提交的文件信息不会出现在$_POST中,即通过$_POST[‘sendfile’]不会获取到任何提交的文件信息。文件信息保存在$_FILES变量中。
ps:有两个位置可以限制表单上传文件大小,一个是在表单中设置MAX_FILE_SIZE,一个是在php.ini中设置upload_max_filesize选项。要注意的是这两个值的大小是不一样的,编写表单代码时设置的MAX_FILE_SIZE不能大于upload_max_filesize的值。这两个地方要做区分,因为后面介绍上传失败时,会有不同的错误代码。
错误代码的详细介绍如下:
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属性使用的是一个数组。
(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>
这两种情况对应的$_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数组中各个字段表示特定的信息,详细信息如下:
如下:
转载请注明:jinglingshu的博客 » PHP预定义变量