黑帽联盟

标题: 文件上传实例分享 php语言 [打印本页]

作者: yun    时间: 2017-1-23 14:27
标题: 文件上传实例分享 php语言
本帖最后由 yun 于 2017-1-23 14:29 编辑

我们在注册网络应用账号之后,在填充个人资料的时候一般都会更换会员图像,在发邮件的时候加附件,将文件共享到QQ群空间或者网络硬盘等等,这些操作看似就是把东西上传一下,然后显示出来,那么简单。所有这些操作都涉及到一个技术,那就是文件上传。

在PHP中,有一些内置的文件操作函数,然后再加上一自定义的函数,就可以很清楚的实现文件上传这一操作,今天我就以一个案例的形式来说一说PHP文件上传的实现过程。

首先,我们在自己的PHP开发环境存放本地站点的根目录下,新建一个目录,命名为upload(也就是上传的意思),然后打开目录,在里面新建三个PHP文件upload.php、uploadservice.php和ok.php,这三个文件分别是用户上传的界面文件和对用户上传的文件进行处理并给出结果的文件。还有要建一个目录用来存放上传的文件,我这里面就命名为upfile。最后整个目录结构如下:
/upload
/upload/ok.php
/upload/upfile
/upload/upload.php
/upload/uploadservice.php

然后我们就开始编写代码,首先把用于用户上传文件的界面写好(也就是upload.php),这个比较简单,我在这里就用一个table加form表单来实现。具体代码如下:
<!-- 上传文件表单,必须有enctype属性 -->

  1. <form action="upload.php" method="post" enctype="multipart/form-data" name="myform">
  2. <table>
  3. <tr><td align="center" colspan="2"><font style="font-size: 30px;font-family: 宋体;">文件上传</font></td></tr>
  4. <tr><td>用户名:</td><td><input type="text" name="username" /></td></tr>
  5. <tr><td>上传文件简介:</td><td><textarea name="fileintro" rows="10" cols="50"></textarea></td></tr>
  6. <tr><td>选择上传文件:</td><td><input type="file" name="myfile" /></td></tr>
  7. <tr><td><input type="submit" value="上传" /></td></tr>
  8. </table>
  9. </form>
复制代码

接下来就是对用户上传的文件进行接收并保存,具体思路是先判断用户是否有上传文件,如果没有则给出提示,有就对文件大小和类型作出判断,如果符合条件开始接收文件,最后将上传文件转移到指定的目录。具体实现代码如下:
  1. <?php
  2. //接收上传用户信息
  3. $username=$_POST['username'];
  4. $fileintro=$_POST['fileintro'];
  5. //获取文件的大小
  6. $file_size=$_FILES['myfile']['size'];
  7. if($file_size>2*1024*1024){
  8. echo "<script type='text/javascript'>alert('文件过大,不能上传!');</script>";
  9. exit();
  10. }
  11. //获取文件的类型
  12. $file_type=$_FILES['myfile']['type'];
  13. if($file_type!='image/jpg'&&$file_type!='image/pjpeg'){
  14. echo "文件类型只能是JPG!";
  15. }
  16. //判断是否有文件上传
  17. if(is_uploaded_file($_FILES['myfile']['tmp_name'])){
  18. //把文件转移到你希望的目录
  19. $uploaded_file=$_FILES['myfile']['tmp_name'];
  20. //给每个用户动态创建文件夹
  21. $user_path=$_SERVER['DOCUMENT_ROOT']."/upload/upfile/".$username;
  22. //判断该用户是否已经有文件夹
  23. if(!file_exists($user_path)){
  24. mkdir($user_path);
  25. }
  26. //$move_to_file函数将文件转移到指定目录
  27. $file_true_name=$_FILES['myfile']['name'];
  28. $move_to_file=$user_path."/".time().rand(1,1000).substr($file_true_name,strripos($file_true_name,"."));
  29. if(move_uploaded_file($uploaded_file,iconv("utf-8","gb2312",$move_to_file))){
  30. header("Location: ok.php");
  31. }else{
  32. header("Location: upload.php");
  33. }
  34. ?>
复制代码

ok.php只是一段JS弹出代码,如下:
  1. <script type="text/javascript">
  2. alert('文件上传成功!');
  3. history.back();
  4. </script>
复制代码

请注意,文件编码为utf-8格式,文件名为中文的文件,上传到指定目录之后,接收到的文件名可能会出现乱码的情况,因些这里使用iconv("utf-8","gb2312",$move_to_file)))将文件编码格式由utf-8转换成gb2312,这样就能防止乱码的发生。





欢迎光临 黑帽联盟 (https://bbs.cnblackhat.com/) Powered by Discuz! X2.5