【Web安全】关于PHP-文件上传的探索(看不懂你来打我)

1 文件的上传

首先,写一个HTML 的表单,用于上传文件,命名为form.html。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>cnm</title>
</head>
<body>
<form method="post" action="saonima.php" enctype="multipart/form-data">
    <input type="hidden" name="MaxFileSize" value="1000000">
    文件:<input type="file" name="file"/>
    <input type="submit" value="submit"/>
</form>
</body>
</html>

*标签中的 enctype = “multipart/form-data” 这个代码的作用是不对字符编码。在使用包含文件上传表单的控件中必须使用该值。
*form标签下的第一个input标签type为hidden,是隐藏域,写在上传文件的表单之前用于控制上传文件的大小。

2 超级全局变量$_FILES

返回一个数组,列表如下:

$_FILES[‘file’][‘tem_name’] 文件在服务器存放的临时地址。

$_FILES[‘file’][‘name’] 文件名。

$_FILES[‘file’][‘size’] 文件的大小,单位是B。

$_FILES[‘file’][‘type’] 上传文件的类型

$_FILES[‘file’][‘error’] 错误的类型,0:表示没有发生错误。

1:表示上载文件的大小超出了约定值。

2:表示上载文件大小超出了 HTML 表单的 MAX_FILE_SIZE 元素所指定的最大值。

3:表示文件只上传了一半。

4:表示没有上传任何文件。

3 文件的接收

is_uploaded_file()判断文件是否是通过 HTTP POST 上传的,里面的参数是文件名用超级全局变量$_FILES来获取。返回值类型为bool型。

<?php
	if(is_uploaded_file($_FILES["file"]["tmp_name"])) {
		echo '上传成功';
	} 
	else {
		echo '上传失败';
	}

4 上传文件后的移动

move_uploaded_file(),返回值为bool型。

bool move_uploaded_file ( string $filename , string $destination )
第一个参数是上传的合法文件地址,第二个参数是要存放的地址。

<?php
	if(is_uploaded_file($_FILES["file"]["tmp_name"])) {
		echo'上传成功,移动完毕';
		move_uploaded_file($_FILES['file']['tmp_name'],$_FILES['file']['name']);
	}
	else {
		echo '上传失败';
	}

如例,默认的保存目录是php文件的根目录,可以在该文件下再创建文件夹保存。

如果想将文件保存到当前目录下的upload文件夹(手动新建一个就行)可以修改move_uploaded_files()中第二个参数,如下所示:

'upload/'.$_FILES['file']['name']
发布了916 篇原创文章 · 获赞 250 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/weixin_43838785/article/details/105097679