PHP 文件上传
PHP 中有一个变量 $_FILES 里面存了文件的信息,如文件名、大小、类型、存放路径等
PHP 文件上传的本质
将存放在临时目录下的临时文件移动到目的文件夹下
move_uploaded_file() 这是 PHP 的内置函数
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="file_upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="提交">
</form>
</body>
</html>
file_upload.php
<meta charset="utf-8">
<?php
if ($_FILES["file"]["error"] > 0) {
echo "Error: " . $_FILES["file"]["error"] . "<br />";
} else {
echo "文件名: " . $_FILES["file"]["name"] . "<br />";
echo "文件类型: " . $_FILES["file"]["type"] . "<br />";
echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "临时存放位置: " . $_FILES["file"]["tmp_name"] . "<br />";
$file_name = iconv('utf-8', 'gbk', $_FILES["file"]["name"]);
if (file_exists("file_upload/" . $file_name)) {
echo $_FILES["file"]["name"] . " 文件已存在";
} else {
move_uploaded_file(
$_FILES["file"]["tmp_name"],
"file_upload/" . $file_name
);
echo "已保存: " . "upload/" . $_FILES["file"]["name"];
}
}
?>
案例
将文件路径写入数据库
file_upload.php
<meta charset="utf-8">
<?php
if ($_FILES["file"]["error"] > 0) {
echo "Error: " . $_FILES["file"]["error"] . "<br />";
} else {
echo "文件名: " . $_FILES["file"]["name"] . "<br />";
echo "文件类型: " . $_FILES["file"]["type"] . "<br />";
echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "临时存放位置: " . $_FILES["file"]["tmp_name"] . "<br />";
$file_name = iconv('utf-8', 'gbk', $_FILES["file"]["name"]);
if (file_exists("file_upload/" . $file_name)) {
echo $_FILES["file"]["name"] . " 文件已存在";
} else {
move_uploaded_file(
$_FILES["file"]["tmp_name"],
"file_upload/" . $file_name
);
echo "已保存: " . "file_upload/" . $_FILES["file"]["name"];
$file_path = "file_upload/" . $_FILES["file"]["name"];
session_start();
include('db.php');
$username = $_SESSION['username'];
$sql = "update user set logo='$file_path' where username='$username'";
mysqli_query($conn,$sql);
}
}
?>
main.php 中显示头像
<?php
$sql = "select * from user where username ='$username'";
$result =mysqli_query($conn,$sql);
$row = mysqli_fetch_assoc($result);
// print_r($row);
?>
<h1>欢迎用户<?php echo $username; ?></h1>
<a href="?logout">退出登录</a>
<form action="file_upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<img src="<?php echo $row['logo']; ?>" alt="你的头像">
<input type="submit" value="提交">
</form>
优化一下代码功能
main.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
a {
text-decoration: none;
border: 2px solid black;
border-radius: 10px;
box-shadow: 5px 5px 5px black;
padding: 5px 30px;
margin: 20px auto;
}
img {
width: 200px;
border-radius: 100px;
border: 2px solid black;
}
</style>
</head>
<body>
<?php
session_start();
include('db.php');
if (!isset($_SESSION['username'])) {
echo "<script>alert('请登录')</script>";
echo "<meta http-equiv='refresh' content='3;url=login.php'>";
exit("<center><h1>Nice Hacker!</h1></center>");
} else {
$username = $_SESSION['username'];
}
if (isset($_REQUEST['logout'])) {
echo "<script>alert('退出成功')</script>";
echo "<meta http-equiv='refresh' content='0;url=login.php'>";
session_destroy();
}
$sql = "select * from user where username ='$username'";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($result);
// print_r($row);
?>
<h1>欢迎用户<?php echo $username; ?></h1>
<a href="?logout">退出登录</a>
<form action="file_upload.php" method="post" enctype="multipart/form-data">
<input type="file" id="upload" name="file" hidden require>
<label for="upload"><img src="<?php echo $row['logo']; ?>" alt="你的头像"></label>
<input type="submit" value="提交">
</form>
</body>
</html>
file_upload.php
<meta charset="utf-8">
<?php
if ($_FILES["file"]["error"] > 0) {
echo "Error: " . $_FILES["file"]["error"] . "<br />";
} else {
echo "文件名: " . $_FILES["file"]["name"] . "<br />";
echo "文件类型: " . $_FILES["file"]["type"] . "<br />";
echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "临时存放位置: " . $_FILES["file"]["tmp_name"] . "<br />";
$ext = pathinfo($_FILES["file"]["name"])['extension'];
$file_name = iconv('utf-8', 'gbk', date("YmdHis").".$ext");
// $file_name = iconv('utf-8', 'gbk', $_FILES["file"]["name"]);
if (file_exists("file_upload/" . $file_name)) {
echo $file_name . " 文件已存在";
} else {
move_uploaded_file(
$_FILES["file"]["tmp_name"],
"file_upload/" . $file_name
);
echo "已保存: " . "file_upload/" . $file_name;
$file_path = "file_upload/" . $file_name;
session_start();
include('db.php');
$username = $_SESSION['username'];
$sql = "update user set logo='$file_path' where username='$username'";
mysqli_query($conn,$sql);
header("Location: main.php");
// 这句话也是跳转
}
}
?>