PHP快速入门04-前后端数据交互与文件上传

简介: 文件上传是一个非常普遍的操作,PHP主要使用到了超全局变量\$_FILES。\$_FILES是PHP中的一个超级全局变量,用于在处理HTML表单时上传文件。它是一个数组,包含了上传文件的各种信息,如文件名、文件类型、临时文件名、文件大小等。$_FILES数组由表单中带有`enctype为multipart/form-data`的file类型的input元素提交而来。

@TOC


前言

本文已收录于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") {
   
   
  {
   
   mathJaxContainer[5]}_POST["name"];
  {
   
   mathJaxContainer[6]}_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/"; // 上传目录
{
   
   mathJaxContainer[8]}target_dir . basename($_FILES["fileToUpload"]["name"]); // 上传文件的完整路径
$uploadOk = 1; // 上传成功的标志

// 检查文件是否为真实的图片
{
   
   mathJaxContainer[9]}_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({
   
   mathJaxContainer[10]}target_file)) {
   
   
        echo "文件". basename( $_FILES["fileToUpload"]["name"]). "上传成功.";
    } else {
   
   
        echo "抱歉,文件上传失败.";
    }
}
?>

总结

以上就是关于本篇文章介绍的内容,前后端数据交互与文件上传,后续更多内容将收录在专栏PHP快速入门与实战中,感谢大家支持。

相关文章
|
22天前
|
关系型数据库 MySQL
web简易开发(二){html5+php实现文件上传及通过关键字搜索已上传图片)}
web简易开发(二){html5+php实现文件上传及通过关键字搜索已上传图片)}
|
22天前
|
安全 PHP
【PHP开发专栏】PHP文件上传与下载实现
【4月更文挑战第30天】本文介绍了在PHP中实现文件上传和下载的详细步骤。文件上传通过`$_FILES`全局数组处理,包括设置HTML表单、PHP脚本处理上传及安全性考虑。文件下载则可使用`readfile()`、`fpassthru()`或`file_get_contents()`函数,同时关注安全问题,如防止目录遍历漏洞。文中还提供了一个简单的图片分享网站案例,演示了上传和下载功能的集成。
|
22天前
|
PHP
从建站打拿站 -- PHP(文件上传)
从建站打拿站 -- PHP(文件上传)
15 0
|
22天前
|
JSON JavaScript Java
【PHP】英文博客专栏PHP快速入门个人笔记
【PHP】英文博客专栏PHP快速入门个人笔记
123 1
原生php实现大案例(特色:不登录不能使用功能 注册 登录 文件上传 发帖 列表页 详情页 )提供sql
原生php实现大案例(特色:不登录不能使用功能 注册 登录 文件上传 发帖 列表页 详情页 )提供sql
原生php实现自定义表单(支持基本类型+file类型(单文件上传))
原生php实现自定义表单(支持基本类型+file类型(单文件上传))
|
11月前
|
程序员 PHP
PHP快速入门12-异常处理,自定义异常、抛出异常、断言异常等示例
PHP的异常处理机制可以帮助我们在程序运行时遇到错误或异常情况时,及时发出警告并停止程序继续运行。下面是10个例子,分别展示了PHP异常处理的不同用法。