使用PHP函数实现文件上传和下载功能
文件上传和下载是我们在Web开发中经常用到的功能,而PHP语言提供了方便实现这两种功能的函数。
一、文件上传
实现文件上传需要用到两个PHP函数:move_uploaded_file()和$_FILES。
1. move_uploaded_file()函数
move_uploaded_file()函数是PHP操作文件的一个重要函数,主要用于将上传文件从临时目录移动到指定目录中。
move_uploaded_file(file,newloc)
file:必需。规定要移动的文件。通常从 $_FILES 数组中获得上传文件。
newloc:必需。规定文件被移动到的新位置。可以是相对路径或者绝对路径。
2. $_FILES变量
$_FILES变量提供了一个用户上传文件的接口。它存储了文件上传后的相关信息,包括文件名、文件类型、文件尺寸等。$_FILES变量是一个二维数组,包含$_FILES[file][name]、$_FILES[file][type]、$_FILES[file][size]、$_FILES[file][tmp_name]和$_FILES[file][error]等元素。
下面给出一个文件上传的代码示例:
<!DOCTYPE html>
<html>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
选择文件上传:<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="上传" name="submit">
</form>
<?php
if(isset($_POST["submit"])) {
$target_dir = "uploads/"; // 上传文件保存的目录
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); // 上传文件的完整路径
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION)); // 获取上传文件的扩展名
// 检查文件是否已存在
if (file_exists($target_file)) {
echo "对不起,文件已存在。";
$uploadOk = 0;
}
// 检查文件大小
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "对不起,文件太大。";
$uploadOk = 0;
}
// 检查文件格式
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "对不起,只允许 JPG, JPEG, PNG & GIF 文件。";
$uploadOk = 0;
}
// 检查 $uploadOk 是否为 0
if ($uploadOk == 0) {
echo "对不起,文件未上传。";
// 如果一切都好,尝试上传文件
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "文件 ". basename( $_FILES["fileToUpload"]["name"]). " 已上传。";
} else {
echo "对不起,上传文件时发生了错误。";
}
}
}
?>
</body>
</html>
二、文件下载
实现文件下载也需要用到两个PHP函数:readfile()和header()。
1. readfile()函数
readfile()函数可用于读取文件内容并将其发送到输出缓冲区。它常用于读取文本文件和二进制文件,包括图像和视频文件。
readfile(filename)
filename:必需,规定文件的名称/路径及名称。
2. header()函数
header()函数用于发送原始HTTP头到客户端。header()函数必须在浏览器输出之前调用,否则将会报错。
下面给出一个文件下载的代码示例:
<?php
$file = 'downloads/file.zip'; // 文件路径
if (file_exists($file)) {
//设置头信息,发送文件给浏览器下载
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: '.filesize($file));
readfile($file); // 发送文件内容
exit;
} else {
echo "对不起,该文件不存在。";
}
?>
总结:
使用PHP函数实现文件上传和下载功能非常简单。文件上传需要用到move_uploaded_file()函数和$_FILES变量,文件下载需要用到readfile()函数和header()函数。我们只需要根据自己的需求编写相应的代码即可。
