文章目录
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)
}
}