我是dream,我在新课培训学习网安方面的知识,下面是我的第12次上课的内容。
目录
软件推荐:
开发java后端应用:IDEA、vscode
开发前端(VUE、react):vscode
开发php: vscode、PhpStorm 2020.3.2 x64安装的版本推荐次新,不要选最新的,因为有很多bug没有发现,也不要选太老的,因为功能不全。
01 WEB技术
从程序的结构上来描述:分为两种
C/S架构:Client / Server(客户端/服务器)
指客户端/服务器端的交互
客户端软件是专门开发出来的,如QQ、lol、绝地求生,用户必须安装软件才能使用。
必须下载安装好客户端,并且服务器正在运行,才能够正常地使用。B/S架构:Browser / Server(浏览器/服务器)
指浏览器/服务器端的交互
B/S架构将浏览器作为客户端,用户只需要安装一个浏览器,就可以访问各种网站的服务,如百度搜索、4399(不需要下载客户端,只需要一个浏览器,服务器在运行,就可以使用
PHP运行于服务器端,既可以在C/S架构中维客户端提供服务器接口,也可以作为B/S架构来搭建动态网站。这里主要基于B/S架构进行讲解。
什么是web
含义:Web的本意是蜘蛛网,在计算机领域中称为网页。
构成:它是一个由很多互相链接的超文本文件组成的系统。
资源:系统中每人有用的文件都称为"资源",并由"通用资源标识符”(URI)进行定位,这些资源通过超文本传输协议(Hypertext Transfer Protocol,HTTP)传送给用户,用户单击链接即可获得资源。
HTTP协议
含义:浏览器与Web服务器之间的数据交互需要遵守一些规范
发布者:HTTP就是其中的一种规范,它是由W3C组织推出的
作用:专门用于定义浏览器与Web服务器之间数据交换的格式,HTTP在Web开发中有着大量的应用
URL地址
传输数据所使用的协议
协议://主机IP地址:端口/资源名称
协议://域名:端口/资源名称
例如: http://127.0.0.1:80/helloworld/index.php
由于80是Web服务器的默认端口号,因此可以省略URL中的":80"
127.0.0.1:指向本机的网卡地址,通俗的来讲就是访问自己本机!(回环)
80:端口,80为默认端口
目前市面上常用的编程语言
C++:运行速度快、编写程序代码量大、开发周期长 (2个月)
java:运行速度较快、编码程序代码量适中、开发周期较短(1个月)
python:运行速度慢、编码程序代码量非常少、开发周期较短(一周)
php:开发web程序特别方便(所有内容都写在页面)
02 PHP概述
PHP是什么?
PHP:Hypertext Preprocessor(超文本预处理器)是一种通用开源脚本语言。
它是全球网站使用最多的脚本语言之一,全球前100万的网站中,有超过70%的网站是使用PHP开发的,这就是我们为什么要学php的原因,我们希望看懂php的代码好挖漏洞。
PHP脚本在服务器上执行,默认文件扩展名是".php"
PHP发展
PHP有Rasmus Lerdorf雷斯莫斯·勒道夫开发
PHP受欢迎的原因
开源免费、面向对象、快捷性、跨平台性、支持多种数据库、PHP中可嵌入HTML,编辑简单、实用性强、程序开发快
到目前为止市面上仍然没有出现比PHP更简单易用的编程语言,就连全球著名的网站都在使用PHP
请看下表:
![](https://i-blog.csdnimg.cn/blog_migrate/ce93e27498a1c6f442ad680ad99d91c7.png)
基于MVC模式的PHP框架
目前有很多流行的基于MVC模式的PHP框架,可以提高开发速度。例如,国外的有Zend FrameWork、Laravel、Yii、Symfony、Codelgniter等;
国内也有比较流行的框架,如ThinkPHP。
常用工具
Notepad++的特点是小巧,占用资源较少,非常适合初学者使用。大家先直接用它就可以了
NetBeans和Zend Studio功能强大(相当于python pycharm),但占用较多资源,使用较为复杂,适合专业的开发人员使用。
PHP环境搭建
数据库: mysql、oracle、SQLserver
Web服务器:Apache、Nginx
环境:PHP7.x环境
使用PHP需要先安装环境,安装环境比较麻烦,需要安装Web服务、PHP应用服务器、MySQL管理系统。
Web服务:apache 和 nginx PHP:多版本 MySQL:多版本
因为多环境、多版本、多系统,集成包就出现了。集成包(phpStudy、Xampp、宝塔面板、wdcp面板),安装很方便。
这里课堂上推荐使用phpStudy
只要在您的web自录中创建.php文件即可,服务器将自动为您解析这些文件。
不需要编译任何软件,或安装额外的工具。
由于PHP是免费的,大多数的Web主机都提供对PHP的支持。
安装phpstudy
1. 启动Apache
2. 创建站点
在浏览器中输入http:// 127.0.0.1,会提示站点创建成功。
如果不成功,则回到小皮,找到小皮所在的物理地址
然后再浏览器上输入:http://127.0.0.1/index.html ,就可以创建站点了。
3. 创建内容
phpstudy的网页内容都在www的目录下,所以,现在www的目录下创建一个文件夹“studyphp”(名字可以随意取),再在刚创建好的文件夹“studyphp”下创建以“php”为拓展名的文件“index.php”。
用右键选择“记事本”的打开方式,编写文件内容并保存
访问自己创建的网站http://127.0.0.1/studyphp/index.php
由于记事本写代码比较麻烦,于是继续安装软件
安装vscode
1. 设置背景色
2.调整界面字体大小(Ctrl +/ Ctrl -)
3. 设置语言,安装中文插件
安装好后自动跳出下图谭庄,单击蓝色框框,改变语言,自动重启
文字转换成功
4.打开php所在的文件夹,开始编写代码
勾选信任
刚才用记事本写的代码在vscode里面,语法和内容有了很好的区分
并且在编写代码时,忘记了单词,会自动提示补全
03 PHP基本语法
标记
由于PHP是嵌入式脚本语言,它在实际开发中经常会与HTML内容混编在一起,所以为了区分HTML与PHP代码,需要使用标记对PHP代码进行标识
当解析一个文件时,PHP会寻找起始和结束标记,也就是告诉PHP开始和停止解析二者之间的代码。此种解析方式使得PHP可以被嵌入到各种不同的文档中去,而任何起始和结束标记之外的部分都会被PHP解析器忽略。
标记类型 | 开始标记 | 结束标记 | 开启项 |
标准标记 | <?php | ?> | 无 |
短标记 | <? | ?> | short_open_tag |
ASP式标记 | <% | %> | asp_tags |
Script标记 | 无 |
示例
ctrl + s 保存所写的代码
输出语句
使用很简单,它不仅可以输出各种类型的数据,还可以在学习和开发中进行简单的调试。
常用输出语句
echo:可将紧跟其后的一个或多个字符串、表达式、变量和常量的值输出到页面中,多个数据之间使用逗号","分隔
print:与echo的用法相同,唯一的区别是print只能输出一个值
print_r():PHP的内置函数,它可输出任意类型的数据,如字符串、数组等
var_dump():不仅可以打印一个或多个任意类型的数据,还可以获取数据的类型和元素个数
示例:
ps:为了排版好看,我多加了一些标点符号。
只要保证语法部分是英文格式就好,内容可以是中文。
编辑完成后记得按Ctrl+S键,保存后,才有内容。
注释
注释:在PHP开发中,为了便于对代码的阅读和维护,可以使用注释来进行解释和说明。它在程序解析时会被PHP解释器忽略。
分类 | 风格 | 注释使用示例 |
单行注释 | C++风格的单行注释 “//” | //输出一句话 |
Shell脚本语言风格的注释 “#” | # 输出一句话 | |
多行注释 | C风格的多行注释 “/……/” | /* echo 'Hello, PHP'; echo 100 + 200; */ |
标识符
标识符可以认为就是名字(变量的名字、常量的名字、函数的名字、类型的名字……)
标识符:PHP程序开发中,经常需要自定义一些符号来标记一些名称,如变量名、函数名、类名等,这些符号被称为标识符。
标识符的定义需要遵循一定的规则,具体如下:
1、标识符只能由【字母(A-Z、a-z)、数字(0-9)、下划线(_)】组成,且不能包含空格 AK47、M416、M_416、M-416(这个不行,只能由_下划线的符号)
2、标识符只能以字母或下划线开头的任意长度的字符组成(不包含数字)AK_47、_m416、 98K(这个不行,数字不能开头)
3、标识符用做变量名时,区分大小写 $a,$A
4、如果标识符由多个单词组成,那么应使用下划线进行分隔(例如:user_name)student_name
5、合法标识符:wangan、wangan88、_wangan、username、password等。
6、非法标识符:66wangan、wang an、123、@wangan等。
关键字
关键字:是编程语言里事先定义好并赋予特殊含义的单词,也称作保留字。和其他语言一样,PHP中保留了许多关键字,例如class、public等。
关键字:这些东西不能用作标识符
04 数据与运算
1. 常量
常量就是在脚本运行过程中值始终不变的量。是一旦被定义就不能被修改或重新定义。
比如数学中的圆周率π就是一个常量,其值就是固定且不能被改变的。
常量遵循标识符的命名规则,默认大小写敏感,习惯上常量名称总是使用大写字母表示。
常量定义
在内存条中开辟一个空间,存放数据
常量定义方式有两种
define函数
const关键字
define方式定义
首个参数定义常量的名称
第二个参数定义常量的值
可选的第三个参数规定常量名是否对大小写不敏感。默认是false
如果设置为true,该常量则大小写不敏感。默认是大小写敏感的。
const方式定义
预定义常量
2. 变量
概念:变量是用于存储信息的“容器”;
组成:在PHP中,变量是由$符号和变量名组成的。
规则:变量名的命名规则与标识符相同。
举例:如$number、$_it为合法的变量名,而$123、$*math为非法变量名。
变量赋值
PHP、javascript 弱类型语言
java、c#
由于PHP是一种弱语言,变量不需要事先声明,就可以直接进行赋值使用。
实现方式:一种是默认的传值赋值,另一种是引用赋值。
传值赋值:变量默认总是传值赋值,将"="右边的数据赋值为左边的变量。
引用赋值:所谓引用赋值就是在要赋值的变量前添加“&“符号。
两种实现方式的区别:传值赋值方式当一个变量值发生改变时,不影响另一个变量;而引用赋值的方式,另一个变量会随之变化。
示例:
超级全局变量
PHP中预定义了几个超级全局变量(superglobals),这意味着它们在一个脚本的全部作用域中都可用。你不需要特别说明,就可以在函数及类中使用。
PHP超级全局变量列表
预定义的 $_GET变量用于收集来自 method="get"的表单中的值。
从带有GET方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏),并且对发送信息的量也有限制。预定义的$_POST变量用于收集来自method="post"的表单中的值。
从带有POST方法的表单发送的信息,对任何人都是不可见的(不会显示在浏览器的地址栏),并且对发送信息的量也没有限制。预定义的 $REQUEST 变量包含了 $GET、$POST和 $COOKIE的内容。
$_REQUEST变量可用来收集通过GET和POST方法发送的表单数据也许也碰到过这样的需求:传递某人参数时,如果表单POST来,就用$POST的值,如果没有,就获取$GET里的值。很多人就会想到$REQUEST,因为当$GET和$POST同时有同名的参数时,$REQUEST里的就是$POST,满足了$POST优先的需求(这个谁优先其实是在php.ini里配置的,默认POST是比GET优先的。
为什么__FILE__被称为常量而 $_GET称为变量呢?因为.__FILE__代表了当前文件名是不会变化的
$_GET请求随着请求的不同它的值是不一样的。
表达式
在PHP中,任何有值的内容都可以理解为表达式。
3. 数据类型
PHP中支持3类数据类型
标量数据类型
复合数据类型
特殊数据类型
在PHP中所讲的数据类型指的是变量所保存的数据本身。
a. 标量数据类型
bool类型
布尔型是PHP中较常用的数据类型之一,通常用于逻辑判断。
表示事物的"真“和"假",并且不区分大小写。
输出结果为:
整型
整型可以由进制、进制和十六进制数指定,用来表示整数
1.在它前面加上“-"符号,可以表示负数。
2.八进制数使用0~7表示,前缀为0
3.十六进制数使用0~9与A~F表示,以0x为前缀
浮点型
浮点数是程序中表示小数的一种方法,或是指数形式。
通常使用标准格式和科学计数法格式表示。
字符串类型
概念:字符串是由连续的字母、数字或字符组成的字符序列。
表示方式:分别为单引号、双引号、heredoc语法结构和nowdoc语法结构。
注意:双引号里面可以解析变量单引号输出学符串,看下面例子:
单引号跟双引号的区别
php中字符串拼接:
PHP中可以使用字符串连接符 . 来拼接字符串,它可以把两个或两个以上的字符串拼接成一个新的字符串。
学符串拼接有两种形式,分别是直接使用学符串连接符.和赋值运算符.=。具体语法格式如下:
以上两种表达输出内容都相同。一个是直接引用其他变量,一个是字符串的拼接。
b. PHP特殊数据类型
NULL 值表示变量没有值。NULL是数据类型为 NULL的值。
NULL值指明一个变量是否为空值。同样可用于数据空值和NULL值的区别。
可以通过设置变量值为NULL来清空变量数据:
在下列情况下一人变量被认为是NULL:
1.被赋值为NULL。
2.尚未被赋值。
3.被unset()。
c. 数据类型检测
PHP中变量的数据类型通常不是开发人员设定的,而是根据该变量使用的上下文在运行时决定的。
数据类型检测函数
PHP中提供了许多检测数据类型的函数,但大致可以分为两种:gettype()函数和is*()类函数括号里的参数为待要检测的值。
is* ()如果检测的值符合检测的数据类型,则返回true,否则返回false。
gettype()函数
is_ ()类函数
d. 数据类型转换
时机:在PHP中,对两个变量进行操作时,若其数据类型不相同,则需要对其进行数据类型转换。
分类:通常情况下,数据类型转换分为自动类型转换和强制类型转换。
自动类型转换
指的是当运算需要或与期望的结果类型不匹配时,PHP将自动进行类型转换,无需开发人员做任何操作。
分类:最常见的有3种,分别为转换成布尔型、转换成整型和转换成字符串型。
强制类转换
就是在编程时手动转换数据类型,在要转换的数据或变量之前加上“(目标类型)”即可。
其他数据类型自动转换为bool类型情况
这个自动转换我们不需要去记忆,平时在写代码的过程中尽量去避免这些问题
下面的情况是布尔值判断时自动进行类型转换
1.整形的0为假 其他的整形为真
2.浮点0.0为假 小数点后只要有一位非0的值结果就为真
“空学符串为假” 只要里面有一个空格都为真 比如'a'为真,如果是空格字符串那么' '也为真
字符串的0也看作为假 其他的都为真
空数组也将其看作为假 只要里面有一个值都为真
空也为假(null)
未声明成功的资源也为假
4. 运算符
运算符,专门用于告诉程序执行特定运算或逻辑操作的符号。根据运算符的作用,可以将PHP语言中常见的运算符分为9类。
算数运算符:
是用来处理加减乘除运算的符号
也是最简单和最常用的运算符号
+ - * /
后两个纯属娱乐,不需要掌握。
赋值运算符
赋值运算符
1. 是一个二元运算符,即它有两个操作数
2. 它将运算符右边的值 赋给左边的变量
①将5赋值给变量$c
②再把变量$c的值赋值给变量$b
③把变量$b的值赋值变量$a,表达式赋值完成
比较运算符
是用来对两个变量或表达式进行比较
其结果是布尔类型的true或false
大于>、小于<
用注释掉的方法会什么都不显示,为了显示是否成立,所以用var_dump这个语法。
大于或等于>=
等于==
恒等于===
不等于!=
逻辑运算符
是在程序开发中用于逻辑判断的符号
真返回值类型是布尔类型
1. and和&&
2.or 或 ||
3. xor异或
4. !非
递增递减运算符
也称作自增自减运算符
可被看作是一种特定形式的复合赋值运算符
"++"或"--"放在操作数的前面,则先进行自增或自减运算,再进行其他运算。
"++"或"--"放在操作数的后面,则先进行其他运算,再进行自增或自减运算。
位运算符
是针对二进制数的每一位进行运算的符号
它专门针对数学0和1进行操作
按位与
1 10 11 100 101 110 -- 6
1 10 11 100 101 110 111 1000 1001 1010 1011 -- 11
0: false
1: true
按位或
按位非
按位异或
位移运算
左移:
00001011
00010110
右移:
00001011
00000101
错误运算符
PHP的错误控制运算符使用@符号来表示,把它放在一个PHP表达式之前,将忽略该表达式可能产生的任何错误信息。如:echo@(4/0);
三元运算符
对 expr1求值为 TRUE时的值为 expr2,在 expr1求值为 FALSE时的值为 expr3。
自PHP5.3起,可以省略三元运算符中间那部分。表达式expr1?:expr3在expr1求值为TRUE时返回
expr1, 否则返回 expr3。
PHP_EOL 是一个换行符,兼容更大平台。
运算符的优先级:
指的是在表达式中各人运算符是有参与运算的先后顺序的
例如:先乘除,后加减
同一行的运算符具有相同的优先级
左结合方向表示同级运算符的执行顺序为从左到右
右结合方向则表示执行顺序为从右到左
补充:圆括号()优先级别最高。例如,4+3*2的输出结果为10,(4+3)*2的输出结果为14
算术运算符 ( 先乘除后加减 ) > 比较运算符 > 逻辑运算符 > 赋值运算符
运算顺序符合数学规律
感谢老默老师,课程同步在享学微信公众号上,关注公众号,自动回复获取代码笔记资料。