php代码实现文件上传下载功能及详细解释

涛哥 PHP代码

以下是一个简单的 PHP 文件上传和下载功能的示例代码:

文件上传代码(upload.php):

<!DOCTYPE html>
<html>
<head>
	<title>文件上传示例</title>
</head>
<body>
	<h1>文件上传示例</h1>
	<?php
	if ($_SERVER["REQUEST_METHOD"] == "POST") {
		$target_dir = "uploads/";
		$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
		$uploadOk = 1;
		$imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));

		// 检查文件是否为真正的文件
		if (!is_uploaded_file($_FILES["fileToUpload"]["tmp_name"])) {
			echo "<p>请选择要上传的文件!</p>";
			$uploadOk = 0;
		}

		// 检查文件是否已经存在
		if (file_exists($target_file)) {
			echo "<p>文件已经存在!</p>";
			$uploadOk = 0;
		}

		// 检查文件大小
		if ($_FILES["fileToUpload"]["size"] > 5000000) {
			echo "<p>文件过大!</p>";
			$uploadOk = 0;
		}

		// 允许特定的文件格式
		if ($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
			&& $imageFileType != "gif" && $imageFileType != "pdf") {
			echo "<p>只允许上传 JPG, JPEG, PNG, GIF 和 PDF 格式的文件!</p>";
			$uploadOk = 0;
		}

		// 如果通过了所有的检查,尝试将文件移动到指定的目录
		if ($uploadOk) {
			if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
				echo "<p>文件 " . htmlspecialchars(basename($_FILES["fileToUpload"]["name"])) . " 上传成功!</p>";
			} else {
				echo "<p>上传文件时出现错误!</p>";
			}
		}
	}
	?>
	<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post" enctype="multipart/form-data">
		选择文件:<input type="file" name="fileToUpload" id="fileToUpload"><br>
		<input type="submit" value="上传" name="submit">
	</form>
</body>
</html>

文件下载代码(download.php):

<?php
$file = "uploads/" . basename($_GET["file"]);

// 设置 HTTP 响应头,告诉浏览器下载文件
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=" . basename($file));
header("Content-Length: " . filesize($file));

// 将文件内容输出到输出缓冲区
readfile($file);
?>

在上传代码中,我们使用了 $_FILES 超全局变量来获取上传文件的信息。我们进行了一系列的检查,以确保上传的文件符合要求,并尝试将文件移动到指定的目录中。如果移动成功,我们输出一个成功消息,否则输出一个错误消息。

函数来设置响应头,告诉浏览器下载文件。我们使用 basename 函数来获取文件名,并使用 readfile 函数将文件内容输出到输出缓冲区中。

在使用这些代码之前,你需要先创建一个名为 "uploads" 的目录,用于存储上传的文件。你还需要将这些代码保存为两个不同的 PHP 文件,例如 "upload.php" 和 "download.php",并将它们上传到你的 Web 服务器中。

当用户访问 "upload.php" 页面时,他们将看到一个简单的表单,用于上传文件。当他们提交表单时,文件将被上传到 "uploads" 目录中,并显示一个成功或失败的消息。

如果你想让用户下载上传的文件,你可以在另一个页面上链接到 "download.php",并将文件名作为查询参数传递给该页面,例如:

<a href="download.php?file=myfile.pdf">下载文件</a>

将下载名为 "myfile.pdf" 的文件。请确保上传的文件名不包含任何可能引起安全问题的特殊字符,例如 ".." 或 "/"。你还可以对上传的文件进行更复杂的验证和处理,例如检查文件类型、大小、内容等,以确保它们符合你的要求。

猜你喜欢:

html 实现文件下载功能代码示例

php下载功能代码怎么写

java实现文件下载代码