**任务一 WEB学习 笔记**
任务一 WEB学习 笔记
内容:1.安装phpstudy,python并配置好相关的环境;
2.了解OSI七层协议体系,掌握HTTP协议(请求方式,报文内容与种类),可以利用burpsuite 实现简单的抓包改包;
3.掌握PHP的基本语法、数据类型、变量常量
一、OSI七层协议体系
1、互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层
每一层的协议,主要有如下:
物理层协议:EIA/TIA-232、EIA/TIA-499、Ethernet、802.3;
数据链路层协议:Farme Relay、HDLC、PPP、IEEE802.2/802.3;
网络层协议:IP、IPX、AppleTalk DDP;
传输层协议:TCP、UDP、SPX
会话层协议:RPC、SQL、NFS、NFS、NETBIOS、nams、 AppleTalk;
表示层协议:TIFF、GIF、JPEG、ASCII;
应用层协议:FTP、HTTP、Telent、NFS、SMTP、Gateway、ANMP。
关于协议更详细的内容,可以参考https://blog.csdn.net/qq_39584315/article/details/79468124
2、关于主要层次间的主要协议的关系及作用方式,做一下简单介绍
物理层:物理层主要功能即在介质上传输高低电平,但是单纯的高低电平并没有意义,因此必须对其进行合理的编码和分组,因此有了数据链路层;
数据链路层:数据链路层中存在着统一的标准即 ethernet以太网协议
协议规定:一组电信号构成一个数据报,称做“帧”,
其结构为:
head部分(18Byte):
- 发送者/源地址(6Byte);
- 接受者/目标地址(6Byte);
- 数据类型(6Byte)。
data部分 长度为46–1500字节。当数据报的长度超过1518Byte时,以太网将会分片发送。
源地址和目标地址即网卡的mac地址,其由12位16进制数构成,结构为:FF:FF:FF:FF:FF:FF,前六位为厂商编号,后六位为流水号。
ethernet协议以广播的方式通信(通过arp协议获得另一台主机的Mac地址)
网络层:ethernet协议的广播方式只在局域网内有效,必须找出一种方法来区分哪些计算机属于同一广播域,哪些不是,如果是就采用广播的方式发送,如果不是,就采用路由的方式(向不同广播域/子网分发数据包),mac地址是无法区分的,它只跟厂商有关。
故网络层的功能为:引入网络地址,来区分哪些计算机属于同一个广播域(子网)。
IP协议:目前广泛采取IPV4协议,近年来发展出了IPV6地址。其范围从0.0.0.0到255.255.255.255。
IP地址分为两个部分:网络部分和主机部分,分别用于标识子网与主机。
子网掩码:是一个网络部分都是1,主机部分都为0的二进制码,如:255.255.255.0。
将两个IP地址与子网掩码分别进行与运算后,若结果相同,则两台计算机处于同一广播域中,反之则不是。
IP数据包:ip数据报分为head和data两部分,可以直接放入以太网包的data部分。
ip头长为20–60Byte,IP数据长度不超过65515Byte。
APR协议:其功能为:广播方式发送数据包,获取目标主机或者网关的mac地址。
工作方式为:每台主机的IP地址都是已知的。
例如:主机172.16.10.10/24访问172.16.10.11/24
一:首先通过ip地址和子网掩码区分出自己所处的子网
二:分析172.16.10.10/24与172.16.10.11/24处于同一网络(如果不是同一网络,那么下表中目标ip为172.16.10.1,通过arp获取的是网关的mac)
广播域内所有的主机接受后拆开包,发现目标IP是自己的,则响应返回自己的IP地址。
传输层:我们通过ip和mac找到了一台特定的主机,如何标识这台主机上的应用程序,答案就是端口,端口即应用程序与网卡关联的编号。
端口范围:0–65535,其中0-1023为系统端口。
传输层的作用即为:建立端口到端口的连接。
TCP协议:
可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。
udp协议:
不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。
应用层:应用层功能:规定应用程序的数据格式。
例:TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了”应用层”。
**
二、HTTP超文本传输协议
HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准,通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。我们称这个客户端为用户代理程序(user agent)。应答的服务器上存储着一些资源,比如HTML文件和图像。我们称这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或者隧道(tunnel)。
**HTTP协议中,并没有规定必须使用它或它支持的层。事实上,HTTP可以在任何互联网协议上,或其他网络上实现。HTTP假定其下层协议提供可靠的传输。因此,任何能够提供这种保证的协议都可以被其使用。因此也就是其在TCP/IP协议族使用TCP作为其传输层。
通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。
HTTP的工作原理:HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
HTTP响应及请求的步骤:1、HTTP的客户端(通常是浏览器),与WEB服务器的端口(默认是80),建立一个TCP套接字连接。
2、通过TCP套接字,客户端向服务器发送一个请求文本,请求文本包括请求行、请求头部、空行、请求数据4部分。
3、WEB服务器解析请求,定位请求资源,将资源复副本写到套接字,客户端读取,响应由状态行、响应头部、空行和响应数据4部分组成。
/4、若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求。
5、客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
HTTP协议是基于请求–响应模式的,服务端只有在接收到来自客户端的请求之后才会发出响应。
无状态保存:HTTP是一种不保存的协议,即HTTP协议对于发送过的请求和响应都不做持久化处理。
针对这个实例,网站为了能 够掌握是谁送出的请求,需要保存用户的状态。HTTP/1.1虽然是无状态协议,但为了实现期望的保持状态功能, 于是引入了Cookie技术。有了Cookie再用HTTP协议通信,就可以管理状态了。
无连接:HTTP协议限制每次连接只处理一个请求,服务端处理完请求并收到来自客户端的应答后,即断开连接。早起的HTTP是在连接完成后直接断开。而在HTTP1.1中,是会等待几秒的,若有新的请求,则通过此连接来发送和接受,若没有任何操作,则连接断开。等待的时间可以通过后端代码来调整。
HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
**
HTTP请求方式
**
http的请求消息:
共同8种请求方式:GET、POST、HEAD、PUT、DELETE、TRACE、OPTATION、CONNECT,后五种存在于http1.1中。
GET 获取资源:GET方式是最常用的一种方式,当需要从客户端读取文档,或者点击链接时,都是通过GET方式来进行请求。请求参数和对应的值附加在URL后面,利用一个问号(“?”)代表URL的结尾与请求参数的开始,传递参数长度受限制。参数和参数之间通过“&”隔开。
上图是百度搜索DJI的请求文本。可以看到GET方式不包含请求数据的部分。
我们可以在地址栏中清楚的看到,各个数据之间用”&”符号隔开。显然,这种方式不适合传送私密数据。另外,由于不同的浏览器对地址的字符限制也有所不同,一般最多只能识别1024个字符,所以如果需要传送大量数据的时候,也不适合使用GET方式。
POST 传输实体主题:POST可以允许客户端给服务器的数据较多,而且将数据封装在请求数据中,可以传输大量数据。这样POST方式对传送的数据大小没有限制,而且也不会显示在URL中。
上图即为一个POST的请求报文。请求行中不包含数据字符串,这些数据保存在”请求内容”部分,各数据之间也是使用”&”符号隔开。(上图乱码,并没有表现出来。)
HEAD方式 获取报文首部:HEAD方式同GET方式相同,只不过服务器在接受到HEAD请求后,只发送响应头,而没有相应数据。
PUT方式 传输文件:PUT方式在请求报文主体中包含文件内容,
将文件保存到URL制定位置。
DELETE方式 删除资源:DELETE与PUT相反,将URL制定位置的资源删除。
OPTIONS 查询支持的请求方式:用来查询针对指定URL指示资源支持的方法。
TRACE 回显请求:回显服务器收到的请求,主要用来诊断和测试。
CONNECT 预留给代理服务器:HTTP1.1中,预留给能够将连接改为管道的代理服务器(???)通常用于SSL加密服务器的连接(???)
请求头:请求头由关键字/值对组成,每行一对儿,中间用英文冒号分割。常见的有:
User-agent :浏览器类型;
Accept:客户端可识别的文件类型
Host:请求的主机名
Connection:连接方式,有keep-alive,close两种
实例见上。
HTTP响应消息:HTTP响应消息也由四个部分组成,状态行,响应头,空行和响应数据。与请求文本的唯一区别就是用响应状态信息替换了请求信息。
状态行依次为:HTTP版本号, 状态代码以及状态描述信息,之间以空格分隔。
HTTP状态码:http状态码由三位数字构成第一位数据表明当前请求处理情况(响应的类型)。
1xx:消息,信息已被接受且正在进行处理。
2xx:成功,信息已被处理完毕。
3xx:重定向,需要后续操作才能完成这一请求。
4xx:请求错误,请求含有语法错误或者无法执行。
5xx:服务器错误,服务器在处理正确请求时出现错误。
例如:
HTTP响应头与请求头类似,具体见下表。
URL:URL由以下几个部分组成:
- 传输协议;
- 层级URL标记符号(//);
- 访问资源所需的凭证信息(可省略);
- 服务器(域名 或 IP地址);
- 端口号(若默认为80可以省略);
- 路径(以/区分目录);
- 查询(GET方式下,以“?”为起始,以“&”为分割)。
- 片段(以“#”为起始)
三、Burpsuite
Burpsuit的安装
资源:http://ximcx.cn/post-110.html
安装方法及代理的设置及简单抓取HTTP包:https://www.cnblogs.com/v1vvwv/p/how-to-install-BurpSuite.html
功能:
拦截代{过}{滤}理(Proxy),你可以检查和更改浏览器与目标应用程序间的流量;
可感知应用程序的网络爬虫(Spider),它能完整的枚举应用程序的内容和功能;
高级扫描器,执行后它能自动地发现web应用程序的安全漏洞;
入侵测试工具(Intruder),用于执行强大的定制攻击去发现及利用不同寻常的漏洞;
重放工具(Repeater),一个靠手动操作来触发单独的HTTP 请求,并分析应用程序响应的工具;
会话工具(Sequencer),用来分析那些不可预知的应用程序会话令牌和重要数据项的随机性的工具;
解码器,进行手动执行或对应用程序数据者智能解码编码的工具;
扩展性强,可以让你加载Burp Suite的扩展,使用你自己的或第三方代码来扩展Burp Suit的功能。
补充一个完整的POST请求报文:
POST /downloads?client=navclient-auto-ffox&appver=74.0&pver=2.2 HTTP/1.1
Host: shavar.services.mozilla.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0
Accept: /
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
Content-Type: text/plain
Content-Length: 773
Connection: close
Pragma: no-cache
Cache-Control: no-cacheads-track-digest256;a:1583445981
allow-flashallow-digest256;a:1490633678
analytics-track-digest256;a:1585681670
base-cryptomining-track-digest256;a:1583445981
base-fingerprinting-track-digest256;a:1585681670
block-flash-digest256;a:1496263270
block-flashsubdoc-digest256;a:1512160865
content-track-digest256;a:1583445981
except-flash-digest256;a:1494877265
except-flashallow-digest256;a:1490633678
except-flashsubdoc-digest256;a:1517935265
google-trackwhite-digest256;a:1583445981
mozplugin-block-digest256;a:1471849627
mozstd-trackwhite-digest256;a:1585681670
social-track-digest256;a:1583860003
social-tracking-protection-facebook-digest256;a:1583445981
social-tracking-protection-linkedin-digest256;a:1583445981
social-tracking-protection-twitter-digest256;a:1583445981
可以清楚的看到POST请求报文的请求头与请求数据部分。
Repeater模块*
:Repater是一个用来手动修改并补发请求的工具,涌来测试分析他们的响应。可以将其他模块的浏览记录或者攻击结果发送到该模块上并测试他们的响应,通过手动微调来探测漏洞或攻击。
上图是用上面的请求报文测试响应的结果。
可以从Proxy history、site map、Scanner等模块中右键菜单send to repeater发送到repeater,对页面数据进行修改发送。
点击Go进行测试。在右边响应请求。
用“<”和“>”来进行上一个或者下一个的测试。
底部的功能是用于搜索条件,可用正则表达式(难)底部右边显示匹配结果数。
各Tip的功能:
Raw:显示纯文本格式的信息。在文本面板底部有搜索和加亮的功能,可用来搜索报文中感兴趣的东西。
Params对于包含参数的请求,把这些请求处理为名字/值的格式。便于查看和修改。
Headers:以名字/值的方式显示消息头,同时以原始方式显示消息主题。
Hex允许修改由原始二进制组成的消息,如果在文本编辑器修改,某种类型的传输(如,MIME 编码的浏览器请求)包含了可能损坏的二进制内容。为了修改这类消息,应该使用十六进制编辑器。
设置:该模块的设置在菜单栏中。
另外;target指的是消息的请求域,可以修改。
Intruder模块
用于自动对Web应用程序自定义的攻击,Burp Intruder 是高度可配置的,并被用来在广范围内进行自动化攻击。你可以使用 Burp Intruder 方便地执行许多任务,包括枚举标识符,获取有用数据,漏洞模糊测试。合适的攻击类型取决于应用程序的情况,可能包括:缺陷测试:SQL 注入,跨站点脚本,缓冲区溢出,路径遍历;暴力攻击认证系统;枚举;操纵参数;拖出隐藏的内容和功能;会话令牌测序和会话劫持;数据挖掘;并发攻击;应用层的拒绝服务式攻击。
此模块由4个Tip组成
Target:配置对目标服务器攻击的详细信息;
Host:目标主机的域名或IP地址;
Post:目标服务的端口号;
Use HTTPS:选择ssl是否被禁用
Positions:用来配置在攻击中产生的所以HTTP模板
Attack Type:设置攻击模式,有
- sniper 对变量依次进行破解,多个标记依次进行
- battering ram 对变量同时进行破解,多个变量同时进行
- pitchfork 每一个变量对应一个字典,取字典中的对应项
- cluster bomb 每个变量对应一个字典,并且进行交集破解
使用一对§字符来标记出有效负荷的位置,在这两个符号直接包含了模板文本的内容。当把一个有效负荷放置到一个给出的请求的特殊位置上时,就把这§符号放到这个位置,然后在两个符号之间的出现的文本都会被有效负荷替换。当有个特殊位置没有为一个给出的请求安排有效负荷时(这只适用”sniper”攻击类型),那个位置的§字符会被删除,出现在它们之间的文本不会变化。
当使用 Burp Suite 发送一个其他地方的请求时,Burp Intruder 会对你最想放置有效负荷的位置做一个最好的猜测,并且它把这些放置在每个 URL 和主体参数的值里,以及每个cookie 里。每个标记和它中间的文本都会被加亮以显得更清晰。你可以使用 Intruder 菜单上的选项标记的位置是要替换还是附加现有的参数值。
refresh:刷新编辑器里有颜色的代码
Payloads
Payload Sets Payload数量类型设置
Payload Opetions 该选项会根据选项1中Payload type的设置而改变
Payload Processing 对生成的Payload进行编码、加密、截取等操作
Payload Encoding
Grep-Match
Grep-Extract
通过正则提取返回信息中的内容
Grep-Payloads
Redireations 控制如何处理重定向
四种攻击模式
PHPstudy的安装与运行环境的设置
PHPstudy的直接进入官网下载即可,环境配置也可参照网站附带的说明进行。
链接:https://www.xp.cn/using.html
写了一个helloworld的测试页面
运行截图如下:
完成。
Python的安装
之前早已完成。到官网下载安装即可
PHP基本语法
PHP是一种在服务器上运行的脚本语言,用于动态生成html文件。
PHP 文件通常包含 HTML 标签以及一些 PHP 脚本代码。
PHP脚本可放置在文间的任何位置,以**<?php**开头,以**?>**结尾。
三种注释方法:
//:单行注释;
#:也是单行注释
/* */:多行注释,跨越多行。
PHP语言对用户定义的类,函数,关键词大小不敏感,
如:ECHO “Hello World!”;
echo “Hello World!”;
EcHo “Hello World!”;都是合法的。
但是PHP语言的变量对大小写敏感。
变量:
PHP变量命名规则:
变量必须以$开头,$后是变量的变量名;
变量名必须以字母或者下划线开头,不能以数字开头;
变量名只支持数字,字母和下划线;
如:
<?php
$x=5;
$y=6;
z=z=z=x+$y;
echo $z;
?>
PHP变量会在首次对其赋值时创建。
当变量赋的值是文本时,需要用引号括起来
$text=“PHP LANGUAGE”;
PHP是一门类型松散的语言,可以根据值,自动把变量转换成正确的类型。
同C语言一样,PHP的变量的作用范围有三种。分别是局部(local),全局(globe)和静态(static);
作用范围定义与C一样。局部变量定义在函数内部声明。在函数内部起作用。全局变量定义在函数之外声明,在只能在函数外部访问。
globe关键词,用于在函数内部访问全局变量
function myTest() {
global x,x,x,y;
y=y=y=x+$y;
}
在上面例子中,y的值改变。
PHP同时在名为$GLOBES[index]的数组中存储了所有的全局变量。其下标为变量名,在函数内部也可以访问。而且可以直接更新全局变量。
上面的例子也可以写为:
fucation myTest(){
$GLOBE[‘y’]=$GLOBE[‘x’]+$GLOBE[‘y’];
}
static关键词
函数在执行完成后,会删除所有的局部变量,但有时我们不需要删除这个变量。因此在首次定义时可以采用static关键词。
/<?php
fucation myTest(){
static $x=8;
echo $x;
$x++;
}
myTest();
myTest();
myTest();
?>
在上面代码中,三次调用myTest函数的打印值分别为8,9,10。
Echo/Print
是PHP的两种输出方式。
主要区别在于:
- echo能输出一个以上的字符串,没有返回值;
- print只能输出一个字符串,且始终返回值1。
因此,echo比print少快,因为没有返回值。
且二者都是一个语言结构,有无括号均可使用,即echo和echo(),print和print()都是正确的。
echo可用于显示变量,显示字符串,也可显示多个字符串。
echo显示变量:
/<?php
$txt1=“Learn PHP”;
$txt2=“W3School.com.cn”;
$cars=array(“Volvo”,“BMW”,“SAAB”);echo $txt1;
echo “<br>”;
echo “Study PHP at $txt2”;
echo “My car is a {$cars[0]}”;
?>
输出结果为:
Learn PHP
Study PHP at W3School.com.cn
My car is a Volvo
print除不能一次显示多条字符串外,其余语法结构与echo相同。
PHP字符串字符串括在单双引号内。可以包含http语言。
PHP整数
可以用三种格式规定整数:十进制、十六进制(前缀是 0x)或八进制(前缀是 0
PHP浮点数
以小数或者指数形式表达的数。
PHP逻辑 true和false两种
$x=true;
$y=false;
通常用于条件测试
PHP数组用于存储多个变量(类似于C,可以简单看成下标也可以自定义的C语言类型的数组。)
/ <?php
$cars=array(“Volvo”,“BMW”,“SAAB”);
$=array(9.8.7);
可以用方括号语法来访问数组元素。
即$数组名[key]的方式可以访问数组单元。方括号也可以换成花括号{}。
也可以
在$数组名后面跟一个空的方括号[]即**$数组名[]**的格式来新建数组单元。其键为之前使用的最大整型的键+1。
但是,不可以访问一个没有定义过的数组键名,否则会导致E_NOTICE级别的报错,其值为NULL。
在PHP中,可以用**var_dump()**函数查看变量的类型和值
在字符串中添加字符串数组元素时,需要在字符串元素符号外加{}。
PHP对象(*)
对象是存储数据和如何处理数据的信息的类型。
在PHP中,必需明确地声明对象
首先我们必须声明对象的类。对此,我们使用 class 关键词。类是包含属性和方法的结构。
然后我们在对象类中定义数据类型,然后在该类的实例中使用此数据类型:
NULL值:
NULL值表示无值。NULL是NULL类型唯一的值
NULL表示变量是否为空,也可用于区分空字符串和空值数据库。
可以通过把值设置为 NULL,将变量清空
<?php
$x=“Hello world!”;
x=null;vardump(x=null; var_dump(x=null;vardump(x);
?>
运行结果为:NULL
PHP字符串函数
strlen() 函数:返回字符串的长度,以字符计。
str_word_count() 函数:对字符串中的单词进行计数:
strrev()函数:反转字符串
strpos()函数:用于在字符串中检索指定子串,若存在,则返回首个匹配的位置,若没有,则返回值为false
echo strpos(“hello world”,“world”);
输出值为6。
str_replace() 函数:把替换字符串中的一部分。
echo str_replace(“world”,“kitty”,“hello world!”);
输出结果为 :hello kitty!
更多字符串函数参考:
https://www.w3school.com.cn/php/php_ref_string.asp
PHP常量
PHP常量用define()函数定义,格式为:
define(“name”,value);
或者
define(“name”,value,true);
第一种定义方法对大小写不敏感
第二种定义方法对大小写敏感。
常量的命名以字符或者下划线开头。
即:
首个参数定义常量的名称
第二个参数定义常量的值
可选的第三个参数规定常量名是否对大小写不敏感。默认是 false。
PHP结构体
条件语句:同C;
循环语句:while、do……while、for 用法同C。
但是有一个独特的FORREACH语句,用于数组的循环。
number=array(9,8,7);FORREACH(number=array(9,8,7); FORREACH(number=array(9,8,7);FORREACH(number as $value){
echo $value;}
输出结果为:987
注意:在该语句的条件部分,需要一个as执行赋值操作,即把数组内元素的值依次赋给另一个变量。
PHP运算符
算数运算符:±/%,不解释。
赋值运算符:=,+=,-=,=,/=,%= 不解释
字符串运算符:. 注意看,是个英文句点。用来串接两个字符串。
比如:
$t1=“Are you”;
$t2=$t1.“ok?”;
另外还有一个 .=,其用法类似于+=,*=一类。
$t=“I am ”;
$t=$t.=“fine。”;
递增递减运算符
$x++,++$x,$x–,--$x
用法同C,不解释。
比较运算符
比较特殊的几个是:
== 等于,若$x和$y相等,则返回值true;
===,全等于,若相等且类型相同,返回值true;
!=和<>,都是不等于,若不相等,怎返回值true;
!==不全等,若值不相同或者类型不相同,返回值true;
逻辑运算符
&& 与
|| 或
! 非
XOR 异或
数组运算
对于数组运算,上述运算符的含义有些许变化
+ 联合,把两个数组组合起来,不覆盖重复的键。
对于这一点做以具体解释:
对于数组类型,数组里面的元素以键/值对的形式作为储存,
即,完整的数组定义应该是:
$arr=array(key1=>val1,key2=>val2,key3=>val3…);
这样子的。其中的key1、2、3…就是键。
当数组1+数组2时,若数组2中有与数组1中键相同的元素时,则该键所对应的值取数组1中对应的值。
当我们不定义键时,默认键为0、1、 2、 3…
$arr=array(val1,val2,val3…);
就意味:
$arr=array(0=>val1,1=>val2,2=>val3…);
即:如果未指定,PHP 将自动使用之前用过的最大 integer 键名加上 1 作为新的键名
key可以是整形或者字符串。
== 相等,若两个数组有相同的键/值对,则返回值true;
===全等 若两个数组有相同的键值对,且类型相同顺序相同,返回值true;
关于这两个的区别可以参考下面例子:
$a = array(“apple”, “banana”);
$b = array(1 => “banana”, “0” => “apple”);
var_dump($a == b);//bool(true)vardump(b); // bool(true) var_dump(b);//bool(true)vardump(a === $b); // bool(false)
!=和<> 不相等,若两个数组有不同的键/值对,则返回true。
!=== 不全等 ,如果两个数组完全不同,则返回值true。
**任务一 WEB学习 笔记**相关推荐
- 2019年Java Web学习笔记目录
Java Web学习笔记目录 1.Java Web学习笔记01:动态网站初体验 2.Java Web学习笔记02:在Intellij里创建Web项目 3.Java Web学习笔记03:JSP元素 4. ...
- web学习笔记-html-html新增
CCS学习系列笔记 web学习笔记–css(1) web学习笔记–css(2) web学习笔记–css(3) web学习笔记-html-html新增 1.html基本发展 2.h5新增的功能 3.新增 ...
- 【慕课网】Web学习笔记———CSS3 (一)
[Web学习笔记]CSS3 (一) CSS3代码语法 CSS注释代码 CSS样式 内联式css样式 嵌入式css样式 外部式css样式 权值 CSS3选择器 标签选择器 类选择器 ID选择器 类与ID ...
- java web学习笔记(持续更新)
java web学习笔记 一.Java Web简介 二.认识Servlet 1.什么是Servlet? 2.请求路径 3.tomcat 4.Servlet的使用 三.Servlet简单应用 1.创建S ...
- [原创]java WEB学习笔记02:javaWeb开发的目录结构
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- [原创]java WEB学习笔记48:其他的Servlet 监听器:域对象中属性的变更的事件监听器 (3 个),感知 Session 绑定的事件监听器(2个)...
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- [原创]java WEB学习笔记58:Struts2学习之路---Result 详解 type属性,通配符映射
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记35:java WEB 中关于绝对路径 和相对路径问题
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- 移动web——学习笔记整理
目录 Day1 00.流式布局 00.1目标 00.2目录 01.移动端浏览器 02.视口(layout viewport) 03.meta视口标签(单标签) 04.物理像素&物理像素比 05 ...
- 【Go Web学习笔记】第二章 HTTP的客户端实现
前言:大家好,以下所有内容都是我学习韩茹老师的教程时所整理的笔记.部分内容有过删改, 推荐大家去看原作者的文档进行学习, 本文章仅作为个人的学习笔记,后续还会在此基础上不断修改.学习Go Web时应该 ...
最新文章
- 1行代码搞定Latex公式编写,这个4.6M的Python小插件,堪称论文必备神器
- MinGw 和 cygwin 的区别和联系 (跨平台 windows运行linux程序)
- DFT - Introduction to Test Models
- centos7 时间设置
- 【报告分享】2021全球10大金融科技趋势-蚂蚁集团.pdf(附下载链接)
- 比较SynchronizedMap、Hashtable和ConcurrentHashMap的效率
- ubuntu16下安装mongodb 3.6
- 机器学习之K-means算法:深入浅出K-Means算法
- ES6变量的解构赋值注意点及用途(补充)
- 2021最新阿里Java面经
- java 流水_Java之流水号生成器实现
- CTF小工具下载整理
- python tcp socket.connect() [Errno 56] Socket is already connectedconnect
- 截取字符串中某一段数据
- eSpeak: Linux文本转语音工具
- Insert 语法全介绍
- AR涂涂乐⭐六、 UGUI精灵格式、自动延迟截图、优化“4”、移出扫描框终止截图进程
- redis-manger集群管理工具
- 第七届区块链全球峰会 | 谢晗剑:区块链的抽象与演进
- 1.6 airtest控制MUMU模拟器