PHP开发中文件的上传与下载

在PHP中想要实现文件的上传功能其实很简单。。下面我们就来先介绍一下要用的知识点,最后再给出源码。

要让Web服务器具有上传功能,得在配置文件php.ini中设置允许文件上传。配置文件php.ini对文件上传的选项如下表所示。

文件上传配置选项表
选项默认值说明
file_uploads1(默认开启)是否开启文件上传
upload_tmp_dirnull(系统临时目录)上传文件的临时存储目录
upload_max_filesize                2M允许上传文件大小的最大值

当然,上传功能默认是开启的,也可以根据自己的需要去php.ini更改设置。

接下来,简要说明下文件上传的步骤:

1.文件的上传首先通过HTML表单中的file控件将文件上传至php.ini中upload_tmp_dir指定的临时目录。

2.然后由PHP函数move_uploaded_file将上传的文件从临时文件移动到服务器指定目录。


OK,源码奉上,不懂得地方可看注释:

upload.html

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<meta name="viewport" content="user-scalable=no, width=device-width"/> 
<form action="uploadhandle.php" enctype="multipart/form-data" method="post" 
name="uploadfile">
选择上传文件:<input type="file" name="upfile" /><br> 
<input type="submit" value="上传" />
</form>

要注意的是必须指定表单的enctype属性为“multipart/form-data”才可上传文件。

uploadhandle.php

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<meta name="viewport" content="user-scalable=no, width=device-width"/> 
<?php
// include_once 'Error.php';

//文件上传表单所在的文件名
$uploadPage = "upload.html";
//获取要上传到的目录,这里__FILE__变量表示文件当前的绝对路径(包含文件名);realpath的作用是获取规范的绝对路径;dirname作用是去掉文件名,获得目录名
$dir = dirname(realpath(__FILE__)).DIRECTORY_SEPARATOR;//这里DIRECTORY_SEPARATOR其实就是‘/’

//定义一个保存错误信息的变量
$err_msg = false;
//判断是否上传了文件
if(!isset($_FILES['upfile'])){
	$err_msg = "表单不完全";
}
else{
	$fileImg = $_FILES['upfile'];
}

//判断上传的文件是否正确,如果不正确则给予相应的错误信息
switch ($fileImg['error']){
	
	case UPLOAD_ERR_INI_SIZE:
		$err_msg = "文件超过最大上传限制,请重新<a href='{$uploadPage}'>上传</a>\n ";
		break;
	case UPLOAD_ERR_PARTIAL:
		$err_msg = "文件上传不完全,请重新<a href='{$uploadPage}'>上传</a>\n ";
		break;
	case UPLOAD_ERR_NO_FILE:
		$err_msg = "没有选择文件,请重新<a href='{$uploadPage}'>上传</a>\n ";
		break;
	case UPLOAD_ERR_FORM_SIZE:
		$err_msg = "文件超过页面最大上传限制";
		break;
	case UPLOAD_ERR_CANT_WRITE:
		$err_msg = "文件写入失败,请重新<a href='{$uploadPage}'>上传</a>\n";
		break;
	case UPLOAD_ERR_NO_TMP_DIR:
		$err_msg = "没有临时文件夹,请重新<a href='{$uploadPage}'>上传</a>\n";
		break;
	case UPLOAD_ERR_OK:
		break;
	default:
		$err_msg = "未知错误,请重新<a href='{$uploadPage}'>上传</a>\n";
	
}
//规定上传的文件的种类,如果没有上传规定的种类则给予错误信息
if(!in_array($fileImg['type'], array('image/jpeg','image/pjpeg','image/png'))){
	$err_msg = "只允许上传.png或.jpg的图片。请重新<a href='{$uploadPage}'>上传</a><br/>";
}
//如果上传的文件没有出错,则将该文件从临时文件夹转移到给定的文件夹(这里将图片保存到是当前目录下的source文件夹里)
if(!$err_msg){
	if(!move_uploaded_file($fileImg['tmp_name'], $dir."source/".$fileImg['name'])){
		$err_msg = "移动文件失败。请重新<a href='{$uploadPage}'>上传</a><br/>";
	}
}
//如果以上步骤有出现错误,则输出错误信息,否则显示出刚上传的图片
if($err_msg){
	echo $err_msg;
}
else{
	echo "<img src='source/{$fileImg['name']}' alt = '上传的文件' title='上传的文件' />";
	echo "上传成功!";
}


至于文件的下载嘛,那就更简单了*>_<*

对于文件的下载,只需给出要下载文件的所在位置即可

download.php

<?php
//相对于网站根目录文件存储路径
$downdir = "source/";
//打开目录
$dirHandle = @opendir($downdir);
//读取里面的所有文件(除了本身和上级目录)
while($filen = readdir($dirHandle)){
	if($filen != "." && $filen != ".."){
		echo "<a href='".$downdir.$filen."'>".$filen."</a><br/>";
	}
}
//关闭目录
closedir($dirHandle);





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值