前言
本文已收录于PHP全栈系列专栏:PHP快速入门与实战
前后端数据交互与文件上传
前后端数据交互 $_GET $_POST
他们都是超全局变量。它们用于从HTTP请求中获取数据,并且在很多情况下都可以起到相同的作用。但是,它们之间还是有一些不同之处。
$_GET 当浏览器向服务器发送一个HTTP GET请求时,浏览器会将请求的参数信息附加在URL后面(如www.example.com/index.php?name=john&age=25)。这些参数的信息都被存储在PHP的超全局变量$_GET中。在PHP脚本内,可以通过$_GET['name']和\$_GET['age']来获取相应的值。需要注意的是,由于这些数据被附加在URL后面,它们是可见的,因此不适合传输敏感的数据。
$_POST: 当浏览器向服务器发送一个HTTP POST请求时,浏览器会将请求的参数信息附加在HTTP消息主体中。这些参数的信息都被存储在PHP的超全局变量$_POST中。在PHP脚本内,可以通过$_POST['name']和$_POST['age']来获取相应的值。相比$_GET,由于POST请求的参数信息在HTTP消息主体中,因此不会像GET请求一样被直接暴露在URL中,所以适合传输敏感的数据。
下方演示一个前端通过form提交name和email的时候,PHP获取数据的示范。
HTML代码:
<form method="post" action="process_form.php">
<label for="name">Name:</label>
<input type="text" name="name" id="name">
<br>
<label for="email">Email:</label>
<input type="email" name="email" id="email">
<br>
<input type="submit" value="Submit">
</form>
PHP代码:
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = $_POST["name"];
$email = $_POST["email"];
// 处理数据,比如存储到数据库中
}
?>
文件上传
文件上传是一个非常普遍的操作,PHP主要使用到了超全局变量$_FILES。$_FILES是PHP中的一个超级全局变量,用于在处理HTML表单时上传文件。它是一个数组,包含了上传文件的各种信息,如文件名、文件类型、临时文件名、文件大小等。$_FILES数组由表单中带有enctype为multipart/form-data
的file类型的input元素提交而来。
- $_FILES数组包含五个元素:
- $_FILES['name']:上传文件的原始文件名。
- $_FILES['type']:上传文件的MIME类型(文件类型)。
- $_FILES['tmp_name']:上传文件在服务器上储存的临时文件名。
- $_FILES['error']:上传文件时的错误代码。
- $_FILES['size']:上传文件的大小,单位为字节。
开发人员可以使用$_FILES数组将上传的文件移到其它位置,或进行其他的操作,例如检查文件类型和大小,验证文件是否符合业务要求,压缩图片等等。下方演示了一个文件上传案例。
HTML代码:
<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代码:
<?php
$target_dir = "uploads/"; // 上传目录
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); // 上传文件的完整路径
$uploadOk = 1; // 上传成功的标志
// 检查文件是否为真实的图片
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "文件是一个真实的图片 - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "文件不是真实的图片。";
$uploadOk = 0;
}
// 检查文件是否已经存在
if (file_exists($target_file)) {
echo "抱歉,文件已经存在.";
$uploadOk = 0;
}
// 检查文件大小
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "抱歉,您的文件太大.";
$uploadOk = 0;
}
// 上传文件
if ($uploadOk == 0) {
echo "抱歉,文件没有被上传.";
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "文件". basename( $_FILES["fileToUpload"]["name"]). "上传成功.";
} else {
echo "抱歉,文件上传失败.";
}
}
?>
总结
以上就是关于本篇文章介绍的内容,前后端数据交互与文件上传,后续更多内容将收录在专栏PHP快速入门与实战中,感谢大家支持。