Web技术核心与安全风险(三)Web 后端安全

Web技术核心与安全风险(三)Web 后端安全

PART 1   PHP基本语法PHP介绍PHP(HyperText Preprocessor):超文本预处理器官方网站: https://www.php.net/学习工具:Trae+Phpstudy如何在Trae 中搭建PHP环境1.trae--扩展插件市场里中,搜索PHP,并安装php debug 、php IntelliSense2.在扩展设置里面,配置PHP解释器总共要设置三个,如下图所示,没有的自己创建,路径设为自己电脑里PHP的路径即可PHP基础语法PHP 代码必须包含在 <?php ... ?>标签中。1.打印hello world<?phpecho "hello world";?>语句结束:每条语句以 ;(分号)结束。   注释 //单行注释 /*多行注释*/2.变量命名规则:(1)变量以 $ 符号开始,后面跟着变量的名称(2)变量名必须以字母或者下划线字符开始(3)变量名只能包含字母、数字以及下划线(A-z、0-9 和_)(4)变量名不能包含空格(5)变量名是区分大小写的($y 和 $Y 是两个不同的变量)示例:<?php$message = "欢迎学习 PHP!";echo $message; // 输出变量内容echo "<h1>" . $message . "</h1>";?>PHP数组创建数组(1)[ ]----php版本5.4+(2)array() 函数用于创建数组示例<?php$student = ["xiaoming", "xiaolin", "xixi", "xiaoai"];echo $student[0];?>//输出结果为xiaomingif 条件语句判断条件语句:根据不同情况执行不同代码语法if (条件){条件成⽴时要执⾏的代码;}示例:<?php$score = 75;if ($score >= 60) {echo "成绩及格";}?>//输出结果为成绩及格if...else语句在条件成⽴时执⾏⼀块代码,条件不成⽴时执⾏另⼀块代码,请使⽤ if....else语句语法if (条件){条件成⽴时执⾏的代码;}else{条件不成⽴时执⾏的代码;}示例<?php$score = 55;if ($score >= 60) {echo "成绩及格";} else {echo "成绩不及格";}?>//输出结果为成绩不及格if...elseif....else语句在若⼲条件之⼀成⽴时执⾏⼀个代码块,请使⽤if...elseif....else语句。语法if(条件1){条件1成⽴时执⾏的代码;}else if(条件2){条件2成⽴时执⾏的代码;}else{以上条件不成⽴时执⾏的代码;}示例<?php$score = 75;if ($score >= 90) {echo "成绩优秀";} elseif ($score >= 60) {echo "成绩及格"; // 75 >= 60 成立} else {echo "成绩不及格";}?>//输出结果为成绩及格PHP循环1.for循环语法for (初始值; 条件; 增量){要执⾏的代码;}示例<?php$student = ['xiaoming', 'xiaolin', 'xixi', 'xiaogao'];for ($i = 0; $i <= 3 ; $i=$i+1) {echo $student[$i].' ' ;}?>2.while 循环while 循环将重复执⾏代码块,直到指定的条件不成⽴语法while (条件){要执⾏的代码;}示例<?php$count = 3;$student = ['xiaoming', 'xiaolin', 'xixi', 'xiaogao'];while ($count >= 0) {echo $student[$count].' ' ;$count=$count-1;}?>PHP函数PHP的真正威⼒源⾃于它的函数。在PHP中,提供了超过 1000 个内建的函数PHP 函数准则函数的名称应该提示出它的功能函数名称字⺟下划线开头(不能以数字开头)PHP⾃定义函数<?phpfunction functionName(){// 要执⾏的代码}?>PHP类与函数类是抽象的概念,仅仅是模板。⽤来描述具有相同属性⽅法对象的集合。⽐如:"⼈"是⼀个 类。对象实例,是某⼀个具体的事物 。如 “张三”则是具体存在 是⼀个对象示例<?phpheader("Content-Type: text/html; charset=utf-8");class student{public $name;public $age;public function say() { //自定义函数echo $this->name. " 你好!";}}$stu1 = new student();//new表示调用函数,new student 表示调用student这个函数$stu1 -> name = "xiaoming";echo $stu1->name;$stu1 -> say();?>//输出结果为xiaoming你好!PHP魔术方法(Magic Methods)PHP魔术方法(Magic Methods)在PHP中具有特定的命名和功能• 魔术方法不需要显式调用,而是由PHP解释器在特定时机自动触发。• 通常用两个下划线(__)开头,后跟方法名称,如构造方法 __construct()示例:<?phpclass Person {public function __construct() {echo "construct is coming ~";}}$p1 = new Person();?>超全局变量PHP 的强⼤在于它能轻松处理⽤⼾通过 Web 提交 的数据,这依赖于⼏个特殊的超全局变量,它们是 PHP ⾃动创建的数组。PHP提供了预定义的超全局变量,用来获取HTTP 请求信息

案例:#准备一个登录的页面<!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="b.php" method="get">姓名:<input type="text" name="name"><br>年龄:<input type="number" name="age"><br><button type="submit">提交</button></form></body></html>#准备另一个获取数据的php页面<?phpheader("Content-Type: text/html; charset=utf-8");$name = $_GET['name'] ;$age = $_GET['age'] ;echo "<h3>接收到的参数:</h3>";echo "姓名:{$name}<br>";echo "年龄:{$age}<br>";echo "<a href='a.php'>返回填写表单</a>";?>序列化 (serialize)• 传递多个数据可以用序列化对象• 是将⼀个 PHP 对象(包括它的类名所有属性属性值)转换为⼀个可存储可传输的字符串的过程。反序列化 (unserialize)是将这个字符串还原回原来的 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></head><body><form action="b.php" method="get">姓名:<input type="text" name="name"><br>年龄:<input type="number" name="age"><br>密码:<input type="password" name="pwd"><br><button type="submit">提交</button></form></body></html>#准备另一个获取数据的php页面<?phpheader("Content-Type: text/html; charset=utf-8");$name = $_GET['name'] ;$age = $_GET['age'] ;$pwd = $_GET['pwd'] ;echo "<h3>接收到的参数:</h3>";echo "姓名:{$name}<br>";echo "年龄:{$age}<br>";echo "密码:{$pwd}<br>";class student{public $name;public $age;public $pwd;}$stu1 = new student();$stu1 -> name = $name;$stu1 -> age = $age;$stu1 -> pwd = $pwd;echo "<h3>序列化后的数据:</h3>";$serialized = serialize($stu1);echo $serialized;echo "<h3>反序列化后的数据:</h3>";$restored = unserialize($serialized);echo $restored->name ;echo "<br>";

Read more

NestJS 核心揭秘:InstanceWrapper 的艺术与前端缓存新思路

NestJS 核心揭秘:InstanceWrapper 的艺术与前端缓存新思路

文章目录 * 概述 * 第一部分:深入幕后——NestJS 的“实例管家” InstanceWrapper * 一、核心职责:不止于封装 * 二、关键属性解构(增强版) * 三、一个实例的生命旅程 * 第二部分:灵感跨界——构建前端页面的“InstanceWrapper”缓存层 * 一、设计哲学:前端数据包装器 * 二、定义我们的“前端 InstanceWrapper” * 三、实现缓存管理器与 React Hook * 四、使用场景示例 * 总结 。 概述 在 NestJS 构建的精密后端世界里,依赖注入(DI)是其生命线。而在这条生命线的核心,有一个默默无闻却至关重要的角色——InstanceWrapper。它不仅是 NestJS 容器中的“实例管家”,更是整个框架实现高效、

【前端地图】地图覆盖物:折线(Polyline)与多边形(Polygon)——绘制路线、区域围栏、编辑图形、图形交互

【前端地图】地图覆盖物:折线(Polyline)与多边形(Polygon)——绘制路线、区域围栏、编辑图形、图形交互

🌏第 5 节 地图覆盖物:折线(Polyline)与多边形(Polygon)完全指南 1. 🤓 引言:老曹的吐槽时间 📢 各位童鞋,欢迎来到第 5 节。如果说上一节的 Marker 是地图上的“图钉”,那今天的 Polyline 和 Polygon 就是地图上的“绳子”和“圈地”。老曹我得先泼盆冷水:画点容易画线难,画完还得防穿帮。你以为画个折线就是连几个点?天真!坐标系偏一点,线就飘到海里去了;多边形少个闭合点,区域就漏风了。当年老曹我为了画一个精准的园区围栏,跟产品经理吵了三天,就因为他说“这个角不够圆润”。今天咱们就把这些矢量覆盖物彻底搞懂,别到时候画个三角形像个圆,那就丢人丢到太平洋了。🌊 🗺️ 矢量图形是地图业务的核心,无论是物流路线、行政区域还是电子围栏,都离不开它们。但这玩意儿比 Marker

小白前端必看:用HTML+CSS搞定音频波纹加载动画(附完整思路)

小白前端必看:用HTML+CSS搞定音频波纹加载动画(附完整思路)

小白前端必看:用HTML+CSS搞定音频波纹加载动画(附完整思路) * 小白前端必看:用HTML+CSS搞定音频波纹加载动画(附完整思路) * 引子:这玩意儿真不是JS写的? * HTML结构:先别急着写样式,想想怎么搭积木 * 最懒人的写法:一堆div硬堆 * 稍微体面点的:用ul-li假装有语义 * 我的私藏写法:伪元素大法 * 终极方案:CSS计数器+变量(现代浏览器) * CSS才是重头戏:让柱子跳起来的黑魔法 * 基础版本:上下伸缩就完事了 * 让它们错开:呼吸感的关键 * cubic-bezier才是灵魂参数 * 加点随机性:更像真实的音乐 * 完整的基础版代码 * 别被"音频"俩字骗了:视觉欺骗的艺术 * 什么时候才真的需要绑定音频? * 纯CSS的视觉作弊技巧 * 性能坑点:为什么你的动画卡成PPT * 坑一:用了会触发重排的属性 * 坑二:will-change乱用 * 坑三:层爆炸(Lay

35道常见的前端vue面试题,零基础入门到精通,收藏这篇就够了

35道常见的前端vue面试题,零基础入门到精通,收藏这篇就够了

来源 | https://segmentfault.com/a/1190000021936876 今天这篇文章给大家分享一些常见的前端vue面试题。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 对于前端来说,尽管css、html、js是主要的基础知识,但是随着技术的不断发展,出现了很多优秀的mv*框架以及小程序框架。因此,对于前端开发者而言,需要对一些前端框架进行熟练掌握。这篇文章我们一起来聊一聊VUE及全家桶的常见面试问题。 1、请讲述下VUE的MVVM的理解? MVVM 是 Model-View-ViewModel的缩写,即将数据模型与数据表现层通过数据驱动进行分离,从而只需要关系数据模型的开发,而不需要考虑页面的表现,具体说来如下: Model代表数据模型:主要用于定义数据和操作的业务逻辑。 View代表页面展示组件(即dom展现形式):负责将数据模型转化成UI 展现出来。 ViewModel为model和view之间的桥梁:监听模型数据的改变和控制视图行为、处理用户交互。通过双向数据绑定把 View 层和 Model 层连接了起来,而View