PHP 预定义超全局变量 笔记/练习

预定义超全局数组变量

$_FILES 练习在最后
其他练习跟在每条笔记后

概述

  • 预定义:预定义变量是 PHP 已定义,可以直接使用
  • 超全局:作用域是全局,可以在脚本的任何地方(包括函数内部、外部)都可以进行访问

常用预定义超全局变量

参数名功能
$_GET通过 URL 接收 GET 方法传递的参数
该数组不仅对 method 为 GET 的请求有效,而是对所有带 quary string 的请求有效
$_POST通过 URL 接收 POST 方法传递的参数
会将变量,包括变量名和变量值,以关联数组形式传入当前脚本
$GLOBALS引用全局作用域中可用的全部变量,数组的键就是变量的名字
$_SERVER服务器和执行环境信息
$_FILES通过 POST 方式上传到当前脚本的项目的数组(接收文件上传信息)
$_COOKIE通过 HTTPCookies 方式床底给当前脚本的变量的数组
$_SESSION当前脚本可用 Session 变量的数组
$_REQUEST默认情况下包含了 $_GET , $_POST$_COOIKE 数组
$_ENV通过环境方式传递给当前脚本的变量的数组
$php_errormsg前一个错误信息
$http_response_headerHTTP 响应头
$argc传递给脚本的参数数目
$argv传递给脚本的参数数组

$_GET

  • 通过 URL 接收 GET 方法传递的参数。该数组不仅对 method 为 GET 的请求有效,而是对所有带 quary string 的请求有效

  • 说明

    • $_GET 是一个预定义数组
    • 作用域是全局,脚本任何地方都可以使用
    • 接受从浏览器客户端用户 GET 方式(参数在 url 中)传递到服务器的参数
    • GET 传参的参数名 name$_GET 数组的 key , 参数值 password 作为数组的 value
    • GET 传参时,直接将参数拼接到 URL 中即可
  • 传参示例

    <?phpvar_dump($_GET);?>
    

    image-20231023091000651

  • GET 传参

    直接在 url 后加 ? 再加要传入的参数

    格式:url?参数

    多个参数用 & 连接

  • http://127.0.0.1/get.php?name=gjl&password=123
    
    <?phpvar_dump($_GET);?>
    

    image-20231023143554977

    其中,参数名作为数组中的 key参数的值作为数组的value接收

  • HttpRequest 报文

    GET /get.php?username=gjl&password=123 HTTP/1.1
    Host: 127.0.0.1
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/118.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
    Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
    Accept-Encoding: gzip, deflate
    Connection: close
    Upgrade-Insecure-Requests: 1
    Sec-Fetch-Dest: document
    Sec-Fetch-Mode: navigate
    Sec-Fetch-Site: none
    Sec-Fetch-User: ?1
    
  • HttpResponse 报文

    HTTP/1.1 200 OK
    Date: Mon, 23 Oct 2023 06:25:51 GMT
    Server: Apache/2.4.18 (Win32) OpenSSL/1.0.2e PHP/5.3.29
    X-Powered-By: PHP/5.3.29
    Content-Length: 83
    Connection: close
    Content-Type: text/htmlarray(2) {["username"]=>string(3) "gjl"["password"]=>string(3) "123"
    }
    

$_POST

  • 用于接收浏览器客户端 POST 方式传入的参数

  • 说明

    • $_POST 用于接受浏览器客户端用户 POST 方式传递过来的参数
    • POST 传参,参数在请求的正文
    • GET 传参在 url 中可见,POST 传参在 url 中不可见
    • 以 http 协议通信,都是明文传输
  1. 直接访问无传参

    <?phpvar_dump($_POST);?>
    

    image-20231023091024600

  2. 传入 GET 参数,不显示传入参数

    image-20231023091028500

  3. 表单 post 传参

    • post.html 页面

      <!DOCTYPE html>
      <html lang="en">
      <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
      </head>
      <body><form action="post.php" method="post">姓名:<input type="text" name="username"><br>密码:<input type="text" name="passwd"><input type="submit" value="提交"></form>
      </body>
      </html>
      

      image-20231023144035524

    • post.php 页面

      image-20231023144111099

    • 访问 post.html,输入参数

      image-20231023144134763

    • 点击提交,跳转输出参数

      image-20231023144202015

  4. HackBar 传参

  5. BP 拦截修改 POST 传参

    burpsuite 拦截修改 method 为POST 并添加传入的数据

    拦截修改前

    image-20231023091033546

    修改 method 为 POST 并在最后添加要传入的参数,并放包

    image-20231023151123337

    HttpRequest 报文

    POST /test.php HTTP/1.1
    Host: 127.0.0.1
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 20name=gjl&password=123
    

    此时显示 POST 的参数

    HttpResponse 报文

    HTTP/1.1 200 OK
    Date: Mon, 28 Aug 2023 12:21:30 GMT
    Server: Apache/2.4.18 (Win32) OpenSSL/1.0.2e PHP/5.3.29
    X-Powered-By: PHP/5.3.29
    Content-Length: 78
    Connection: close
    Content-Type: text/htmlarray(2) {["name"]=>string(2) "gjl"["password"]=>string(3) "123"
    }
    

$_COOKIE

  • 为了弥补 HTTP 协议的无状态性,保持用户会话的状态,需要使用 Cookie 技术。

  • cookie 的过程

    1. 用户提交账密
    2. 服务器进行身份认证
    3. 下发 cookie 以供认证
    4. 浏览器客户端所有请求都会携带 cookie 身份信息
    5. 整体流程体现为,保持了 HTTP 会话的状态性
  • 示例代码

    <?phpvar_dump($_COOKIE);?>
    

    image-20231023145204431

  • 向浏览器写入 Cookie 信息

    在 console 控制台中写入

    document.cookie = "name=user_gjl";
    document.cookie = "password=123.com";
    

    image-20231023144605764

    image-20231023144623173

    再次输出 COOKIE

    image-20231023145424817

  • HttpRequest 报文

    image-20231023145553636

$_REQUEST

  • $_REQUEST 默认包含了 $_GET , $_POST$_COOKIE 数组中的所有变量,以上提到的三个数组,包含了浏览器客户端的三大传参方式,也称 GPC

    $_REQUEST 数组在接收参数的时候会受到一个 PHP 选项的控制(request_order

    # /php.ini 配置文件中
    request_order = "GP"     //默认选项
    request_order = "GPC"
    

    image-20231023091108387

  • 示例代码

    <?phpvar_dump($_REQUEST);?>
    
  • GET 传参

    image-20231023145846872

  • POST 传参

    image-20231023150206435

    image-20231023150244567

  • Cookie 传参

    image-20231023150353553

$GLOBALS

  • 代码

    <pre>
    <?phpvar_dump($GLOBALS);
    ?>
    
  • 效果

    image-20231023154940386

$_ENV

  • 代码

    <pre>
    <?phpvar_dump($_ENV);
    ?>
    
  • 效果

    为空

    image-20231023155431988

  • 更改 php 版本

    image-20231023155540498

  • 再次访问

    image-20231023155626579

$_FILES

  • 用来接收上传文件相关信息
函数利用
  • 相关参数

    变量含义
    $_FILES['uploaded']用来保存文件上传信息的
    uploaded 就是表单中文件域 <input> 标签的 name 属性的值
    $_FILES['uploaded']['name']上传文件的名字
    $_FILES['uploaded']['type']上传文件的类型
    $_FILES['uploaded']['tmp_name']上传文件存储在服务器中的缓存路径(在test.php下加sleep(秒数);则缓存中的内容不会立刻删除)
    $_FILES['uploaded']['error']错误代码
    $_FILES['uploaded']["size"]上传文件的大小
  • 注意

    • $_FILES 中存储的与上传文件有关的信息,不是文件本身,文件内容在缓存路径中。
    • 正常文件上传功能,需要将文件从缓存拷贝到服务器的文件系统中
  • 示例

    test.php

    <?phpecho '<pre>';var_dump($_FILES);?>
    
  • 文件上传

    在 DVWA 的文件上传中,将文件上传路径 action 改为 127.0.0.1/test.php

    image-20231023091145977

    点击上传

    查看接收的信息

    image-20231023091150634

    接收的信息(二维数组)

    array(1) {["uploaded"]=>array(5) {["name"]=>string(26) "QQ鎴浘20230828221443.png"["type"]=>string(9) "image/png"["tmp_name"]=>string(46) "C:\Users\LEGION\AppData\Local\Temp\phpAE3A.tmp"["error"]=>int(0)["size"]=>int(2198)}
    }
    
PHP 文件上传
  • 使用 POST 方法上传文件

  • 实现

    1. 利用 $_FILES 捕获文件上传信息

    2. 将缓存拷贝到目标路径下

      move_uploaded_file(缓存路径,目标路径);
      
  • 上传代码注意点

    1. 建立 <form> 表单,使用 PSOT 方法,action 属性为文件上传的路径,文件的 enctype 属性为 multipart/form-data
    2. <input file> 没有 name 属性,后台不能取得 Files
    <html>
    <head><meta charset="UTF-8">
    </head>
    <body><form action="#" method="post" enctype="multipart/form-data"><!-- action='#' 提交到当前界面 -->	<input type="file" name="file"><input type="submit" value="submit" name="submit"></form>
    </body>
    </html>
    <?phpecho"<pre>";//var_dump($_FILES);if(isset($_POST['submit'])){// 如果检测到点击提交则执行以下代码$name = $_FILES['file']['name'];echo "File's name is {$name}<br>";$path = $_FILES['file']['tmp_name'];echo "File's path is {$path}<br>";$save_path = "./{$_FILES['file']['name']}";if(move_uploaded_file($path,$save_path)){echo 'save success!<br />'.'save as ./'.$save_path;}else{echo "save failed";}}
    ?>
    
    • 上传成功

    image-20231023091200492

文件上传练习

  • 将前端代码和后端代码文件放在 phpstudy 的 www 目录下

前端代码 file.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><form action="file.php" method="post" enctype="multipart/form-data"><input type="file" name="file" id=""><input type="submit"></form>
</body>
</html>

image-20231023153335775

后端代码 file.php

<pre>
<?phpvar_dump($_FILES);
?>

image-20231023153455115

  • 访问 127.0.0.1/file.html

    选择文件上传

    image-20231023153612521

  • 点击提交跳转至 file.php 显示上传结果信息

    文件上传后保存到临时目录中

    image-20231023153645500

文件上传后保存

  • 修改后的 file.php 代码

    <pre>
    <?php$tmp_path=$_FILES['file']['tmp_name'];// echo $tmp_path."<br>";$target_path="./{$_FILES['file']['name']}";// echo $target_path."<br>";if(move_uploaded_file($tmp_path,$target_path)){echo "upload to {$target_path} access!"."<br>";}else{echo "upload failed"."<br>";}
    ?>
    
  • 再次选择文件上传

    image-20231023161935796

  • 提交后返回

    image-20231023161824242

  • 此时打开 www 目录可以看到上传的图片文件

    image-20231023162044501

  • 打开,和上传的文件一模一样

    image-20231023162111270

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/117142.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用GoogleNet网络实现花朵分类

一.数据集准备 新建一个项目文件夹GoogleNet&#xff0c;并在里面建立data_set文件夹用来保存数据集&#xff0c;在data_set文件夹下创建新文件夹"flower_data"&#xff0c;点击链接下载花分类数据集https://storage.googleapis.com/download.tensorflow.org/exampl…

冲刺学习-MySQL-常见问题

MySQL索引的最左原则 联合索引的说明 建立三个字段的联合索引联合索引&#xff08;a&#xff0c;b&#xff0c;c&#xff09;相当于建立了索引&#xff1a;&#xff08;a&#xff09;&#xff0c;&#xff08;a&#xff0c;b&#xff09;&#xff0c;&#xff08;a&#xff0…

计算机考研自命题(5)

1、C语言–求和 1、展开式求和。输入一个实数x&#xff0c;计算并输出下式的和&#xff0c;直到最后一项的绝对值小于0.00001.计算结果保留2位小数&#xff0c;试编程。 S x x/2&#xff01; x/3&#xff01; … /* 算法思想&#xff1a;定义一个求阶乘的函数fact(), 头文件调…

蜣螂优化(DBO)求解置换流水车间调度问题(PFSP)

先做一个声明&#xff1a;文章是由我的个人公众号中的推送直接复制粘贴而来&#xff0c;因此对智能优化算法感兴趣的朋友&#xff0c;可关注我的个人公众号&#xff1a;启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法&#xff0c;经典的&#xff0c;或者是近几年…

基于SpringBoot的时间管理系统

基于SpringBoot的时间管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 登录界面 管理员界面 用户界面 摘要 基于Spring Boot的时间管理系统是一款功能丰富…

Unity之ShaderGraph如何实现靠近显示溶解效果

前言 今天我们来实现一个我再B站看到的一个使用LeapMotion实现的用手部触摸就可以显示的溶解效果。 效果如下图所示: 主要节点 Position:提供对网格顶点或片段的Position 的访问,具体取决于节点所属图形部分的有效着色器阶段。使用Space下拉参数选择输出值的坐标空间。 …

ArcGIS笔记10_如何创建渔网?

本文目录 前言Step 1 确定渔网的精度单位Step 2 有底图时创建渔网的操作 前言 ArcGIS中的渔网是一个很好用的工具&#xff0c;它可以创建出规规整整的小格子&#xff0c;每个小格子都对应一个标注点&#xff0c;可以将原本散乱的数据规整化&#xff0c;如下图&#xff1a; Ste…

前沿重器[36] | ACL23-基于检索的大语言模型-报告阅读

前沿重器 栏目主要给大家分享各种大厂、顶会的论文和分享&#xff0c;从中抽取关键精华的部分和大家分享&#xff0c;和大家一起把握前沿技术。具体介绍&#xff1a;仓颉专项&#xff1a;飞机大炮我都会&#xff0c;利器心法我还有。&#xff08;算起来&#xff0c;专项启动已经…

Nginx 防盗链

nginx防盗链问题 盗链&#xff1a; 就是a网站有一张照片&#xff0c;b网站引用了a网站的照片 。 防盗链&#xff1a; a网站通过设置禁止b网站引用a网站的照片。 nginx防止网站资源被盗用模块 ngx_http_referer_module 如何区分哪些是不正常的用户&#xff1f; HTTP Referer…

【Java 进阶篇】Java Tomcat 入门指南

Java Tomcat&#xff08;通常简称 Tomcat&#xff09;是一个流行的开源Servlet容器&#xff0c;用于托管Java Web应用程序。它是Apache软件基金会的一部分&#xff0c;提供了一个稳定、可靠的环境来运行Java Servlets和JavaServer Pages&#xff08;JSP&#xff09;。本篇博客将…

FPGA时序分析与约束(6)——综合的基础知识

在使用时序约束的设计过程中&#xff0c;综合&#xff08;synthesis&#xff09;是第一步。 一、综合的解释 在电子设计中&#xff0c;综合是指完成特定功能的门级网表的实现。除了特定功能&#xff0c;综合的过程可能还要满足某种其他要求&#xff0c;如功率、操作频率等。 有…

【WinForm详细教程一】WinForm中的窗体、Label、TextBox及Button控件、RadioButton和CheckBox、ListBox

文章目录 1.WinForm文件结构2. 窗体的常用属性、方法与事件2.1 常用属性&#xff08;可直接在属性中设置&#xff09;2.2 常用方法2.3 常用事件 3.Label、TextBox及Button控件4.RadioButton和CheckBox5.ListBox&#xff08;列表框&#xff09; 1.WinForm文件结构 .sln文件 &am…

zabbix6.0 部署配置

架构 先简单介绍zabbix监控的最主要的两个组件&#xff1a; zabbix server zabbix agent server 用来部署 web console以及相关的数据存储&#xff0c;所以需要配合一些数据库来保存数据&#xff0c;比如mysql,pgsql, 又有前端的页面所以还需要配置 nginx 和getway 所以 serve…

Unity 文字显示动画(2)

针对第一版的优化&#xff0c;自动适配文字大小&#xff0c;TextMeshPro可以拓展各种语言。第一版字母类语言效果更好。 using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI;public partial class TextBeat…

基于C#使用winform技术的游戏平台的实现【C#课程设计】

基于C#使用winform技术的游戏平台的实现【C#课程设计】 说明项目结构项目运行截图及实现的功能 部分代码一些说明(个人觉得一些难点的说明)一、ListView &#xff0c;ImageList 的综合使用二、图片上传以及picturebox 图片的动态替换三、图表插件的使用四、SQL工具类封装五、高…

Mybatis 简介(一)

这里使用的是3.5.11版本 MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO&#xff08;P…

【proteus】8086 写一个汇编程序并调试

参考书籍&#xff1a;微机原理与接口技术——基于8086和Proteus仿真&#xff08;第3版&#xff09;p103-105&#xff0c;p119-122. 参考程序是p70&#xff0c;例4-1 在上一篇的基础上&#xff1a; 创建项目和汇编文件 写一个汇编程序并编译 双击8086的元件图&#xff1a; …

ant design vue Message 用法以及内容为 html片段情况

ant design vue 的 Message 用法 全局展示操作反馈信息 何时使用 # 可提供成功、警告和错误等反馈信息。顶部居中显示并自动消失&#xff0c;是一种不打断用户操作的轻量级提示方式。 全局配置&#xff1a; // main.ts// 进行全局配置 message.config({top: 0.7rem,//高度…

05 MIT线性代数-转置,置换,向量空间Transposes, permutations, spaces

1. Permutations P: execute row exchanges becomes PA LU for any invertible A Permutations P identity matrix with reordered rows mn (n-1) ... (3) (2) (1) counts recordings, counts all nxn permuations 对于nxn矩阵存在着n!个置换矩阵 , 2. Transpose: 2.…

【数据结构】常见复杂度习题详解 ------ 习题篇

文章目录 &#x1f4cb;前言一. ⛳️前篇回顾二. ⛳️常见时间复杂度计算举例1️⃣实例一2️⃣实例二3️⃣实例三4️⃣实例四5️⃣实例五6️⃣实例六7️⃣实例七8️⃣实例八 三. ⛳️常见空间复杂度计算举例1️⃣实例一2️⃣实例二3️⃣实例三 四. ⛳️总结 &#x1f4cb;前言 …