1. 属性:enctype=“multipart/from-data”
<?php if ($_SERVER['REQUEST_METHOD']=== 'POST') { // 接收文件 使用一个叫做 $_FILE 超全局成员 var_dump($_FILE); } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>文件</title> </head> <body> <!-- 如果一个表单中有文件域(文件上传),必须将表单中的 method 设置为 post ,enctype 设置为 multipart/form-data --> <!-- enctype 默认为 urlencoded 格式 ->发送前编码所有字符(默认) key1=value1&key2=value2 --> <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/from-data"> <!-- 1 --> <input type="text" name="foo"> <input type="text" name="bar"> <!-- 2 --> <input type="file" name="img"> <button>提交</button> </form> </body> </html>
2. 文件上传
案例:文件上传处理基本逻辑
展示
选择文件
传到./upload中
代码
<?php function upload () { if (!isset($_FILES['avatar'])) { $GLOBALS['message'] = '别玩我了'; // 客户端提交的表单内容中根本没有文件域 return; } $avatar = $_FILES['avatar']; // $avatar => array(5) { // ["name"]=> // string(11) "icon-02.png" // ["type"]=> // string(9) "image/png" // ↓↓↓↓↓↓ 存到服务器的临时位置 ↓↓↓↓↓↓ // ["tmp_name"]=> // string(27) "C:\Windows\Temp\php1138.tmp" // ["error"]=> // int(0) // ["size"]=> // int(4398) // } echo $avatar['error']; if ($avatar['error'] !== UPLOAD_ERR_OK) { // 服务端没有接收到上传的文件 $GLOBALS['message'] = '上传失败'; return; } // 接收到了文件 // 将文件从临时目录移动到网站范围之内 $source = $avatar['tmp_name']; // 源文件在哪 // => 'C:\Windows\Temp\php1138.tmp' $target = './uploads/' . $avatar['name']; // 目标放在哪 // => './uploads/icon-02.png' // 移动的目标路径中文件夹一定是一个已经存在的目录 $moved = move_uploaded_file($source, $target); if (!$moved) { $GLOBALS['message'] = '上传失败'; return; } // 移动成功(上传整个过程OK) } if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 接收文件 使用一个 叫做 $_FILES 超全局成员 // var_dump($_FILES); upload(); } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>文件上传</title> </head> <body> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data"> <input type="file" name="avatar"> <button>上传</button> <?php if (isset($message)): ?> <p style="color: hotpink"><?php echo $message; ?></p> <?php endif ?> </form> </body> </html>
上传文件大小限制问题
http://php.net/manual/zh/features.file-upload.php
注意:php.ini就在php的安装目录下,我的wamp都在D盘
修改 php.ini 中的 post_max_size 配置,让服务端可以接受更大的请求体体积
修改 php.ini 中的 upload_max_filesize 配置,让服务端支持更大的单个上传文件*暂时作为了解
type 属性
type 属性为 file 的 input 元素可以通过表单提交文件(上传文件),服务端 PHP 可以通过 $_FILES 获取上传的文件信息。
<?php // 如果选择了文件 $_FILES['file']['error'] => 0 // 详细的错误码说明:http://php.net/manual/zh/features.file‐upload.errors.php if ($_FILES['file']['error'] === 0) { // PHP 在会自动接收客户端上传的文件到一个临时的目录 $temp_file = $_FILES['file']['tmp_name']; // 我们只需要把文件保存到我们指定上传目录 $target_file = '../static/uploads/' . $_FILES['file']['name']; if (move_uploaded_file($temp_file, $target_file)) { $image_file = '/static/uploads/' . $_FILES['file']['name']; } }
$_FILES 同样也是一个关联数组,键为表单的 name ,内容如下:
array(1) { ["avatar"]=> array(5) { ["name"]=>string(17) "demo.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(27) "C:\Windows\Temp\php786C.tmp" ["error"]=> int(0) ["size"]=> int(29501) } }