13.4 文件上传

13.4 文件上传

视频讲解:光盘TMlx13文件上传.exe

文件上传可以通过HTTP协议来实现。要使用文件上传功能,首先要在php.ini配置文件中对上传做一些设置,然后了解预定义变量$_FILES,通过$_FILES的值对上传文件做一些限制和判断,最后使用move_uploaded_file()函数实现上传。

13.4.1 配置php.ini文件

要想顺利地实现上传功能,首先要在php.ini文件中开启文件上传,并对其中的一些参数作出合理的设置。找到File Uploads项,可以看到下面有3个属性值,表示含义如下。

file_uploads:如果值是on,说明服务器支持文件上传;如果为off,则不支持。

upload_tmp_dir:上传文件临时目录。在文件被成功上传之前,文件首先存放到服务器端的临时目录中。如果想要指定位置,可在这里设置,否则使用系统默认目录即可。

upload_max_filesize:服务器允许上传的文件的最大值,以MB为单位。系统默认为2MB,用户可以自行设置。

除了File Uploads项,还有几个属性也会影响到上传文件的功能。

max_execution_time:PHP中一个指令所能执行的最大时间,单位是秒。

memory_limit:PHP中一个指令所分配的内存空间,单位是MB。

说明

如果使用集成化的安装包来配置PHP的开发环境,上述介绍的这些配置信息默认已经配置好了。

注意

如果要上传超大的文件,需要对php.ini文件进行修改。包括upload_max_filesize的最大值,max_execution_time一个指令所能执行的最大时间和memory_limit一个指令所分配的内存空间。

13.4.2 预定义变量$_FILES

$_FILES变量存储的是上传文件的相关信息,这些信息对于上传功能有很大的作用。该变量是一个二维数组。保存的信息如表13.5所示。

表13.5 预定义变量$_FILES元素

【例13.9】本例创建一个上传文件域,通过$_FILES变量输出上传文件的资料。实例代码如下:(实例位置:光盘TMsl139)

<table width="500" border="0" cellspacing="0" cellpadding="0"> <! -- 上传文件的form表单,必须有enctype属性 --> <form action=""method="post"enctype="multipart/form-data"> <tr> <td width="150" height="30" align="right" valign="middle">请选择上传文件:</td> <! -- 上传文件域,type类型为file --> <td width="250"><input type="file"name="upfile"/></td> <! -- 提交按钮 --> <td width="100"><input type="submit"name="submit"value="上传"/></td> </tr> </form> </table> <?php <! -- 处理表单返回结果 --> if(! empty($_FILES)){ //判断变量$_FILES是否为空 foreach($_FILES['upfile']as$name=>$value) //使用foreach循环输出上传文件信息的名称和值 echo $name.' = '.$value.'<br>'; } ?>

运行结果如图13.8所示。

图13.8 $_FILES预定义变量

13.4.3 文件上传函数

PHP中使用move_uploaded_file()函数上传文件。该函数的语法如下:

bool move_uploaded_file ( string filename, string destination )

move_uploaded_file()函数将上传文件存储到指定的位置。如果成功,则返回true,否则返回false。参数filename是上传文件的临时文件名,即$_FILES[tmp_name];参数destination是上传后保存的新的路径和名称。

【例13.10】本例创建一个上传表单,允许上传1000KB以下的文件。实例代码如下:(实例位置:光盘TMsl1310)

<! -- 上传表单,有一个上传文件域 --> <form action="" method="post" enctype="multipart/form-data" name="form"> <input name="up_file" type="file" /> <input type="submit" name="submit" value="上传" /> </form> <! -- ---------------------------------------- --> <?php /* 判断是否有上传文件 */ if(! empty($_FILES['up_file']['name'])){ /* 将文件信息赋给变量$fileinfo */ $fileinfo = $_FILES['up_file']; /* 判断文件大小 */ if($fileinfo['size'] < 1000000 && $fileinfo['size'] > 0){ /* 上传文件 */ move_uploaded_file($fileinfo['tmp_name'], $fileinfo['name']); echo ’上传成功’; }else{ echo ’文件太大或未知’; } } ?>

运行结果如图13.9所示。

图13.9 单文件上传

注意

使用move_uploaded_file()函数上传文件时,在创建form表单时,必须设置form表单的“enctype="multipart/form-data"”属性。

13.4.4 多文件上传

PHP支持同时上传多个文件,只需要在表单中对文件上传域使用数组命名即可。

【例13.11】本例有4个文件上传域,文件域的名字为u_file[],提交后上传的文件信息都被保存到$_FILES[u_file]中,生成多维数组。读取数组信息,并上传文件。实例代码如下:(实例位置:光盘TMsl1311)

请选择要上传的文件 <! -- 上传文件表单 --> <form action="" method="post" enctype="multipart/form-data"> <table id="up_table" border="1" bgcolor="f0f0f0" > <tbody id="auto"> <tr id="show" > <td>上传文件 </td> <td><input name="u_file[]" type="file"></td> </tr> <tr> <td>上传文件 </td> <td><input name="u_file[]" type="file"></td> </tr></tbody> <tr><td colspan="4"><input type="submit" value="上传" /></td></tr> </table> </form> <?php <! -- 判断变量$ FlLES是否为空 --> if(! empty($_FILES[u_file][name])){ $file_name=$_FILES[u_file][name]; //将上传文件名另存为数组 $file_tmp_name=$_FILES[u_file][tmp_name]; //将上传的临时文件名存为数组 for($i=0; $i<count($file_name); $i++){ //循环上传文件 if($file_name[$i]! =''){ //判断上传文件名是否为空 move_uploaded_file($file_tmp_name[$i], $i.$file_name[$i]); echo ’文件’.$file_name[$i].’上传成功。更名为’.$i.$file_name[$i].'<br>'; } } ?>

运行结果如图13.10所示。

图13.10 多文件上传

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

微信扫一扫

微信扫一扫

微信扫一扫,分享到朋友圈

13.4 文件上传