文章教程

11.3文件的上传

9/17/2020 9:40:31 PM 人评论 次浏览

11.3 文件的上传

在网络上用户可以上传自己的文件。实现这种功能的方法很多,用户把一个文件上传到服务器,需要在客户端和服务器端建立一个通道传递文件的字节流,并在服务器进行上传操作。下面介绍一种代码最少并且容易理解的方法。

下面案例主要讲述如何实现文件的上传功能,具体操作步骤如下。

【例11.9】(实例文件:ch12\11.10.php和11.10.1.php)

01 首先创建一个实现文件上传功能的文件。为了设置保存上传文件的路径,用户需要在创建文件的目录下新建一个名称为“file”的文件夹。然后新建11.10.1.php文件,代码如下。

  <html>
  <head>
  <title>实现上传文件</title>
  </head>
  <body>
  <?php
  if ($_POST[add]=="上传"){
         //根据现在的时间产生一个随机数
         $rand1=rand(0,9);
         $rand2=rand(0,9);
         $rand3=rand(0,9);
         $filename=date("Ymdhms").$rand1.$rand2.$rand3;
         if(empty($_FILES['file_name']['name'])){
  	   		 //$_FILES['file_name']['name']为获取客户端机器文件的原名称
             echo "文件名不能为空";
             exit;
             }
         $oldfilename=$_FILES['file_name']['name'];
         echo "<br>原文件名为:".$oldfilename;
        $filetype=substr($oldfilename,strrpos($oldfilename,"."),strlen($oldfilename)-strrpos($oldfilename,"."));
         echo "<br>原文件的类型为:".$filetype;
         if(($filetype!='.doc')&&($filetype!='.xls')&&($filetype!='.DOC')&&($filetype!='.XLS')){
            echo "<script>alert('文件类型或地址错误');</script>";
            echo "<script>location.href='11.3.php';</script>";
            exit;
            }
         echo "<br>上传文件的大小为(字节):".$_FILES['file_name']['size'];
  	   		//$_FILES['file_name']['size']为获取客户端机器文件的大小,单位为B
         if ($_FILES['file_name']['size']>1000000) {
             echo "<script>alert('文件太大,不能上传');</script>";
            echo "<script>location.href='11.3.php';</script>";
            exit;
             }
         echo "<br>文件上传服务器后的临时文件名为:".$_FILES['file_name']['tmp_name'];
  				//取得保存文件的临时文件名(含路径)
         $filename=$filename.$filetype;
         echo "<br>新文件名为:".$filename;
         $savedir="file/".$filename;
         if(move_uploaded_file($_FILES['file_name']['tmp_name'],$savedir)){
              $file_name=basename($savedir);       //取得保存文件的文件名(不含路径)
              echo "<br>文件上传成功!保存为:".$savedir;
             }else{
               echo "<script language=javascript>";
               echo "alert('错误,无法将附件写入服务器!\n本次发布失败!');";
               echo "location.href='11.3.php?';";
               echo "</script>";
               exit;
           }
      }
  ?>
  </body>
  </html>

代码分析如下:

(1)需要首先创建变量设定文件的上传类型、保存路径和程序所在路径。

(2)实现自定义函数获取文件后缀名和生成随机文件名。在上传的过程中,如果上传了大量的文件,可能会出现文件名称重复的现象,所以本实例在文件上传的过程中,首先获取上传文件的后缀名称并结合随机产生的数字,生成一个新的文件,避免了文件名称重复的现象。

(3)判断获取的文件类型是否符合指定类型,如果文件名称符合,则给该文件生成一个具有随机性质的名称,并使用move_uploaded_file函数完成文件的上传,否则显示提示信息。

02 下面创建一个获取上传文件的页面。创建文件11.10.php,代码如下。

  <html>
  <head><title>上传文件</title></head>
  <h3 align="center">上传文件</h3>
  <form method="post" action="11.10.1.php" enctype="multipart/form-data">
       <table border=0 cellspacing=0 cellpadding=0 align=center width="100%">
        <tr>
               <td height="16">
          <input name="file" type="file"  value="浏览" >
          <input type="submit" value="上传" name="B1">
          </td>
        </tr>
       </table>
       </form>
  </body>
  </html>

其中,“<form method="post" action="11.10.1.php" enctype="multipart/form-data">”语句中method属性表示提交信息的方式是post,即采用数据块,action属性表示处理信息的页面为11.10.1.php,ENCTYPE="multipart/form-data"表示以二进制的方式传递提交的数据。

运行结果如图11-11所示。单击【浏览】按钮,即可选择需要上传的文件,最后单击【上传】按钮即可实现上传操作。

image

图11-11 11.10.php页面效果

教程类别