黑帽联盟

 找回密码
 会员注册
查看: 1364|回复: 0
打印 上一主题 下一主题

[php] 文件上传实例分享 php语言

[复制链接]
yun 黑帽联盟官方人员 

920

主题

37

听众

1364

积分

超级版主

Rank: 8Rank: 8

  • TA的每日心情
    奋斗
    2019-10-18 11:20
  • 签到天数: 678 天

    [LV.9]以坛为家II

    本帖最后由 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,这样就能防止乱码的发生。
    帖子永久地址: 

    黑帽联盟 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与黑帽联盟享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和黑帽联盟的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、黑帽联盟管理员和版主有权不事先通知发贴者而删除本文

    您需要登录后才可以回帖 登录 | 会员注册

    发布主题 !fastreply! 收藏帖子 返回列表 搜索
    回顶部