php上传文件

网站经常有上传文件到服务器的需求,如下代码:

<html>
<body>
<form action="do_file.php" method="post"
enctype="multipart/form-data"> //enctype 属性规定了在提交表单时要使用哪种内容类型。如果是二进制文件,必须使用 "multipart/form-data"。
<label for="file">Filename:</label>
<input type="myfile" name="file" id="file" />
<br />
<input type="submit" name="submitBtn" value="Submit" />
</form>
</body>
</html>

编写do_file.php来处理上传请求,$_FILES可以获取上传的文件,如代码:

<?php 
        /**
         * $_FILES是php中存储各种与上传文件相关的信息,其他的数据还是要用$_POST去获取
         * $_FILES['myfile']['name'] 其中的myfile为前台form表单提交过来的name,客户端及其文件的文件名,包括拓展名
         * $_FILES['myfile']['size'] 上传文件的大小,单位为字节
         * $_FILES['myfile']['tmp_name'] 文件上传成功后,在服务器端存储的临时文件名
         * $_FILES['myfile']['error'] 文件上传产生的错误信息,0正常;1文件超出php规定大小;2文件超出html规定的大小;3文件只被部分上传;4文件没有被上传
         */
        $fileMaxSize = 10001000; //允许最大的文件为10001000B
        $allowType = array("jpg", "png", "gif", "jpeg", "ico");//允许的文件拓展名
              
        /**
         * php还提供is_uploaded_file(string filename)和move_uploaded_file(string filename, string destination)
         * is_uploaded_file()函数用来检测指定的文件是否是上传的文件,注意这个函数的参数应该是$_FILES['myfile']['tmp_name'],而不是$_FILES['myfile']['name']
         * move_uploaded_file()函数用来将临时目录里的上传文件,移动到指定的位置
         */
        if(is_uploaded_file($_FILES['myfile']['tmp_name']))
        {
            $userFileNames = explode(".", $_FILES['myfile']['name']);
            $userFileNameLast = array_pop($userFileNames);
            if(!in_array($userFileNameLast, $allowType))
                die("对不起,拓展名不正确");
            if($_FILES['myfile']['size'] > $fileMaxSize)
                die("对不起,文件过大");
            $saveFileName = date("YmdHis").".".$userFileNameLast;
            move_uploaded_file($_FILES['myfile']['tmp_name'], "/home/youthflies/work/workspace/php/test/".$saveFileName);
        }
        else
        {
            die("文件非法");
        }
        echo "上传成功";
    ?>

发表评论

邮箱地址不会被公开。 必填项已用*标注

(Spamcheck Enabled)