PHP实现文件上传和下载操作

今天分享一下将客户端文件如何上传到服务器端

单个文件上传

首先,我们先写好一个静态表单页面,本案例中利用的bootstrap框架搭建的,在此值展示HTML代码,bootstrap框架里面的js和css就不展示出来了,感兴趣的朋友可以下载bootstrap框架。

index.html文件

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>PHP单文件上传</title>
	<script type="javascript" src="../static/js/jquery-1.11.1.min.js"></script>
	<script type="javascript" src="../static/js/bootstrap.min.js"></script>
	<link rel="stylesheet" href="../static/css/bootstrap.min.css">
	<link rel="stylesheet" href="../static/css/bootstrap-theme.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 role="form" action="updload.php" method="post" enctype="multipart/form-data">
				<div class="form-group">
					<input name="upldoad" type="file" class="form-control">
				</div>
				<div class="form-gruop">
					<input type="submit" value="上传文件" class="btn btn-primary">
				</div>
			</form>
		</div>
	</div>
</div>

</body>
</html>

在这里我们采用的是post方式进行文件提交

enctype="multipart/form-data"这段代码当使用有文件上传控件的表单时,该值是必需的。其中enctype 属性规定在将表单数据发送到服务器之前如何对其进行编码,只有 method="post" 时才使用 enctype 属性。

表单中type的类型都包括

button定义可点击按钮(多数情况下,用于通过 JavaScript 启动脚本)。
checkbox定义复选框。
file定义输入字段和 “浏览”按钮,供文件上传。
hidden定义隐藏的输入字段。
image定义图像形式的提交按钮。
password定义密码字段。该字段中的字符被掩码。
radio定义单选按钮。
reset定义重置按钮。重置按钮会清除表单中的所有数据。
submit定义提交按钮。提交按钮会把表单数据发送到服务器。
text定义单行的输入字段,用户可在其中输入文本。默认宽度为 20 个字符。

upload.php文件

header("content-type:text/html;charset=utf-8");
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 {
	$result = move_uploaded_file($_FILES['upload']['tmp_name'], './uploads/'.$_FILES['upload']['name']);
	echo $result ? '上传成功' : '上传失败';
}

涉及到使用表单处理文件上传的知识,在php中我们可以使用$_FILES这个全局数组来处理

$_FILES参数详解

$_FILES[“file”][“name”] – 被上传文件的名称
$_FILES[“file”][“type”] – 被上传文件的类型
$_FILES[“file”][“size”] – 被上传文件的大小,以字节计
$_FILES[“file”][“tmp_name”] – 存储在服务器的文件的临时副本的名称
$_FILES[“file”][“error”] – 由文件上传导致的错误代码

TIPS

其中”file”指的是input的name名称

$_FILES[“file”][“error”]中的[“error”]值情况

UPLOAD_ERR_OK 没有错误发生,文件上传成功
UPLOAD_ERR_INI_SIZE 上传的文件超过了 php.ini中upload_max_filesize(默认情况为2M) 选项限制的值
UPLOAD_ERR_FORM_SIZE 上传文件的大小超过了 HTML表单中MAX_FILE_SIZE选项指定的值
UPLOAD_ERR_PARTIAL 文件只有部分被上传
UPLOAD_ERR_NO_FILE 没有文件被上传或传文件大小为0

为了保存我们上传的文件,要使用move_uploaded_file函数,move_uploaded_file() 函数将上传的文件移动到新位置,若成功,则返回 true,否则返回 false。并且在你的upload.php文件同目录创建一个uploads文件夹。