购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

8.2 get和post方法

在PHP中使用get和post接收来自HTML表单的值,在form表单中定义PHP的接收方式和接收地址。get和post方法主要有以下几点区别。

(1)get是把参数数据队列加到提交表单的action属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制将表单内各个字段与其内容放置在HTML HEADER内一起传送到action属性所指的URL地址。用户看不到这个过程。

(2)get传送的数据量较小,不能大于2KB,这主要是因为受URL长度限制。post传送的数据量较大,一般默认为不受限制。

(3)get安全性非常低,post安全性较高,但是get执行效率却比post方法好。

(4)get是form的默认方法。

建议在传输的数据包含机密信息时用post数据提交方式,在做数据查询时用get方式,在做数据添加、修改或删除时用post方式。

8.2.1 获取表单值

在form表单中,action属性定义提交表单的地址,method属性定义提交的方法,例如:


     <form action="user.php" method="post">
     Username: <input type="text" name="user">
     Password: <input type="password" name="pwd">
     Birthday: <input type="date" name="bday">
     <input type="radio" name="sex" value="male">Male
     <input type="radio" name="sex" value="female">Female
     <!-- checkbox的name须使用数组形式命名,否则PHP只能接收到最后一个被选的值 -->
     <input type="checkbox" name="vehicle[]" value="Bike">bike
     <input type="checkbox" name="vehicle[]" value="Car">car 
     <select name="car">
     <option value="volvo" >Volvo</option>
     <option value="saab" >Saab</option>
     <option value="mercedes" >Mercedes</option>
     <option value="audi" >Audi</option>
     </select>
     <input type="submit" value="Submit">
     </form>

代码中定义接收表单值的地址是user.php,接收方式是post,所以我们编写代码查看在user.php中都接收到了哪些数据。user.php中的代码如下:


     <?php
     var_dump($_POST);
     ?>

这里用$_POST全局变量接收来自表单提交的所有数据并打印出来。提交表单获得的结果示例如下:


     array(6) { ["user"]=> string(5) "admin" ["pwd"]=> string(5) "admin" ["bday"]=> string(10) "2016-10-06" ["sex"]=> string(4) "male" ["vehicle"]=> array(2) { [0]=> string(4) "Bike" [1]=> string(3) "Car" } ["car"]=> string(5) "volvo" }

注意,接收到的复选框vehicle是一个数组。另外,$_POST接收的值是一个以表单元素的name为键,以用户选择或输入的值为对应值的数组。

如果form中选择使用get方式上传数据,那么将本例中的post改为get即可。

8.2.2 处理上传文件

HTML中使用type="file"类型的表单可向服务器上传文件,服务端使用PHP接收文件数据和接收普通表单元素数据的处理方法稍有不同,例如:


     <form action="user.php" enctype="multipart/form-data" method="post" 
     name="upvideo">
     上传文件:<input type="file" name="video" />
     <input type="submit" value="上传" /></form>

上传文件的表单必须在form中定义enctype="multipart/form-data"。此时用于接收文件信息的代码如下:


     <?php
     var_dump($_POST);
     var_dump($_FILES);
     if ($_FILES["video"]["error"] > 0)
       {
       echo "Error: " . $_FILES["video"]["error"] . "<br />";
       } else {
        print_r($_FILES["video"]); 
     if(is_uploaded_file($_FILES['video']['tmp_name'])){ 
     $upfile=$_FILES["video"]; 
     //获取数组里面的值 
     $name=$upfile["name"];//上传文件的文件名 
     $type=$upfile["type"];//上传文件的类型 
     $size=$upfile["size"];//上传文件的大小 
     $tmp_name=$upfile["tmp_name"];//上传文件的临时存放路径 
     // 移动上传的文件到指定目录
     move_uploaded_file($tmp_name, '/Library/WebServer/Documents/book/'.$name);
     }
       }
     ?>

执行上述上传文件操作,打印结果如下:


     array(0) { } array(1) { ["video"]=> array(5) { ["name"]=> string(14) "linux icon.gif" ["type"]=> string(9) "image/gif" ["tmp_name"]=> string(26) "/private/var/tmp/phpyiMCwf" ["error"]=> int(0) ["size"]=> int(15712) } } Array ( [name] => linux icon.gif [type] => image/gif [tmp_name] => /private/var/tmp/phpyiMCwf [error] => 0 [size] => 15712 )

第一个数组为空,表明在使用file类型表单提交数据时并不使用$_POST接收数据,而是使用全局变量$_FILE来接收。PHP中使用move_uploaded_file函数将上传的文件移动到指定位置。

另外,在PHP配置文件php.ini中默认上传文件的大小只有2MB,在上传大文件时需要对配置文件进行修改。php.ini中有关上传文件的设置如下:

·file_uploads 是否允许HTTP文件上传,默认值为On,允许HTTP文件上传,此选项不能设置为Off。

·upload_tmp_dir 文件上传的临时存放目录。如果没指定,那么PHP会使用系统默认的临时目录。该选项默认为空,如果不配置这个选项,文件上传功能就无法实现。

·upload_max_filesize 上传文件的最大尺寸。这个选项默认值为2MB,即文件上传的大小为2MB,如果想上传一个50MB的文件,就必须设定upload_max_filesize=50M。

仅设置upload_max_filesize=50M还是无法实现大文件的上传功能,还必须修改php.ini文件中的post_max_size选项。

·post_max_size通过表单POST给PHP所能接收的最大值,包括表单里的所有值,默认为8MB。如果POST数据超出限制,那么$_POST和$_FILES将会为空。

要上传大文件,必须设定该选项值大于upload_max_filesize选项的值,例如设置了upload_max_filesize=50M,这里就可以设置post_max_size=100M。

另外,如果启用了内存限制,那么该值应当小于memory_limit选项的值。

·max_execution_time每个PHP页面运行的最大时间值(单位秒),默认为30秒。当我们上传一个较大的文件时,例如50MB,很可能要几分钟才能上传完,但PHP默认页面最久执行时间为30秒,超过30秒该脚本就停止执行,导致出现无法打开网页的情况。因此我们可以把值设置得较大些,如max_execution_time=600。如果设置为0,就表示无时间限制。

·max_input_time每个PHP脚本解析请求数据所用的时间(单位秒),默认为60秒。当我们上传大文件时,可以将这个值设置得较大些。如果设置为0,就表示无时间限制。

·memory_limit这个选项用来设置单个PHP脚本所能申请到的最大内存空间。这有助于防止写得不好的脚本消耗光服务器上的可用内存。如果不需要任何内存上的限制将其设为-1。

php.ini配置上传文件功能示例

假设要上传一个50MB的大文件,php.ini配置如下: bsZj4HeXvffkfPKIDtqsz+CSKWsEd6SUg8O1Ctt2MOU9SVGBUe2ADFyFWVjqI6o/


     file_uploads = On
     upload_tmp_dir = "/user/file"
     upload_max_filesize = 50M
     post_max_size = 100M
     max_execution_time = 600
     max_input_time = 600
     max_input_time = 600

点击中间区域
呼出菜单
上一章
目录
下一章
×