单文件上传
最核心的地方:文件域中的name属性值和$_FILES的数组中键的对应关系
先创建一个基于bootstrap的表单:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>PHP单文件上传</title> <!-- bootstrap使用要引入四个文件 --> <script type="javascript" src="../static/js/jquery-3.3.1.js"></script> <script type="javascript" src="../static/js/bootstrap.min.js"></script> <link rel="stylesheet" href="../static/css/bootstrap-theme.css"> <link rel="stylesheet" href="../static/css/bootstrap.min.css"> </head> <body> <div class="col-sm-4 col-sm-offset-4" style="margin-top: 100px"> <div class="panel panel-primary"> <div class="panel-heading">PHP单文件上传</div> <div class="panel-body"> <form action="upload.php" role="form" method="post" enctype="multipart/form-data"> <div class="form-group"> <input name="upload" type="file" class="form-control"> </div> <div class="form-group"> <input type="submit" value="上传文件" class="btn btn-primary"> </div> </form> </div> </div> </div> </body> </html> |
创建表单的时候注意几点:
- bootstrap的使用需要导入四个文件
- 表单属性action指向要处理文件的PHP
- 文件上传是通过POST的方式来进行上传的
- enctype必须是multipart/form-data
- PHP是通过$_FILES来接受HTML表单上传的文件数据
处理上传到的PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?php echo '<pre>'; print_r($_FILES); echo '</pre>'; // 获取错误码 $error = $_FILES['upload']['error']; if($error){//非零 switch($error){ case UPLOAD_ERR_INI_SIZE: case UPLOAD_ERR_FORM_SIZE: echo '文件大小超过限制'; break; case UPLOAD_ERR_PARTIAL: echo '文件上传不完整'; break; case UPLOAD_ERR_NO_FILE: echo '上传文件为空'; break; } }else{ // 内置函数 移动已上传的文件 // 第一个参数是用户上传文件的临时路径 // 第二个参数是用来保存用户上传文件的目的地 move_uploaded_file($_FILES['upload']['tmp_name'],'uploads/'.$_FILES['upload']['name']); } |
注意几点:
- 其实就是判断error的值,非零的时候代码未成功输出未成功的原因,为零的时候成功那么就调用内置函数进行文件的移动。
- 内置函数move_uploaded_file有两个必填参数,第一个参数是用户上传文件了的临时路径,我们可以使用$_FILES来获取,第二个参数是用来保存用户上传文件的目的地。
- 我们可以将move_uploaded_file的返回值存在变量中来对于是否上传成功进行一个最终的判断,并且输出一个最终的提示信息
- 实际使用中,可能还需要考虑是否存在同名文件,是否覆盖或者重命名。
- 上传文件常用的PHP函数有:
- file_put_contents() 将一个字符串写入文件
- move_uploaded_file() 将上传的文件移动到新位置
- is_uploaded_file() 判断文件是否是通过 HTTP POST 上传的
多文件上传