php

网络基础概述

OSI参考模型
1、是一种网络互联模型,该体系结构标准定义了网络互联的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层和应用层),即OSI开放系统互连参考模型。在这一框架下进一步详细规定了每一层的功能,以实现开放系统环境中的互连性、互操作性和应用的可移植性。
2、划分原则是:
(1)网路中各节点都有相同的层次;
(2)不同节点的同等层具有相同的功能;
(3)同一节点内相邻层之间通过接口通信;
(4)每一层使用下层提供的服务,并向其上层提供服务;
(5)不同节点的同等层按照协议实现对等层之间的通信。
(6)根据功能需要进行分层,每层应当实现定义明确的功能。
(7)向应用程序提供服务

TCP/IP参考模型
也是一种网络互联模型,有四个层。
1 应用层
2.传输层
3.网际互联层
4.网络接入层(即主机-网络层)

TCP/IP协议 (互联网协议),以及一整个网络传输协议家族,为互联网的基础通信架构。
包括:TCP,IP,UDP,ARP等。
TCP/IP是一组用于实现网络互连的通信协议。Internet网络体系结构以TCP/IP为核心。基于TCP/IP的参考模型将协议分成四个层次,它们分别是:网络访问层、网际互联层、传输层(主机到主机)、和应用层。

HTTP协议
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。

TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。

网络七层是指OSI七层协议模型,主要是:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
网络五层只是OSI和TCP/IP的综合,是业界产生出来的非官方协议模型,但是很多具体的应用。实际应用还是TCP/IP的四层结构。为了方便可以把下两层称为网络接口层。五层体系结构包括:应用层、运输层、网络层、数据链路层和物理层。
网络四层是指TCP/IP四层模型,主要包括:应用层、运输层、网际层和网络接口层。

互联网访问
互联网中网站访问,本质是一个互联网上有一台已知的服务器,然后用户只得到服务器对应的名字(url), 然后通过url,在经过互联网协议(http)去自动寻找。并且服务器提供数据,浏览器解析数据的过程。

端口(Port)
可以认为是设备与外界通讯交流的出口。分硬件端口、软件端口、网络端口。
任何软件都有属于自己的对外交流的入口(端口),而任何客户机尝试访问服务器都需要指定访问的端口(常用的有默认)。
Web服务器常用端口:80
Telnet远程登录端口:23
FTP服务器常用端口:21
Mysql数据库服务器常用端口:3306

IP
网际协议地址(Internet Protocol Address):是分配给用户上网使用的网际协议的设备的数字标签。
所有计算机在互联网上都有一个唯一的标识IP代表自己
特殊IP:127.0.0.1(代表本机电脑)

域名(Domain Name)
简称域名、网域,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。
IP能够找到电脑,但是用户记不住,所以需要给IP设定一个别名方便用户记住,这种别名叫域名
域名的存在纯粹是为了方便用户记住
域名可以分为顶级/一级域名(.com/.cn/.org/.edu),二级域名(baidu.com),三级域名(www.baidu.com)

正确解析url
例: http://mail.163.com/index.html
1)http://:这个是协议,也就是HTTP超文本传输协议,也就是网页在网上传输的协议。
2)mail:这个是服务器名,代表着是一个邮箱服务器,所以是mail.
3)163.com:这个是域名,是用来定位网站的独一无二的名字。
4)mail.163.com:这个是网站名,由服务器名+域名组成。
5)/:这个是根目录,也就是说,通过网站名找到服务器,然后在服务器存放网页的根目录
6:)index.html:这个是根目录下的默认网页(当然,163的默认网页是不是这个我不知道,只是大部分的默认网页,都是index.html)
7)http://mail.163.com/index.html:这个叫做URL,统一资源定位符,全球性地址,用于定位网上的资源。
(本段解释来源于 https://jingyan.baidu.com/article/2c8c281df0afd00008252aa7.html 仅作为个人笔记,无商业用途,侵删。)

域名解析
计算机将用户输入的域名转换成对应的IP地址才能找到服务器,这个过程叫域名解析,
互联网提供的该服务叫域名系统DNS(Domain Name System)。分两种
(1)提供服务的产品公司将域名和服务器IP维护到DNS上
(2)本地域名解析,可以使用计算机自带的本地域名系统hosts文件(C:\windows\system32\drivers\etc\hosts)
先本地域名解析,如果找不到,再去DNS

Web服务器
一般指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web
客户端提供文档,也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。服务器使用HTTP(超文本传输协议)与客户机浏览器进行信息交流,人们也常称之为HTTP服务器。

PHP
超文本预处理器(PHP Hypertext Preprocessor),是一种通用开源脚本语言。
是一种运行在服务器端的可以嵌入到HTML的开源脚本语言。是一种面向对象、解释型的语言。
依赖于服务器端解析,浏览器不能解析。

php基础

php可以嵌入到html中
必须有开始有结束

<?php
$a="hello world";
echo $a;
?>

php注释:单行注释、多行注释
单行注释: 可以以#或//开头
多行注释:
/*
注释
*/

php语句结束符
单行代码在后面加入分号
特殊:代码最后一行因为有?>可以不加;,但一般都是加上分号的

php变量
变量命名规则
必须以$ 符号开始;并且每次使用变量时都要把$和变量名作为一个整体出现
有字母、数字、下划线组成;数字不能放在开头
变量区分大小写

php是一种弱类型语言,变量的定义可以直接使用,不需要管实际赋值给变量的数据是什么类型
变量可以重新定义

$a=1;
$a="hello world";
echo $a; 	//输出a的值		//echo只能输出简单的数据
var_dump($a);	//a的类型
unset($a);	//删除a,之后不可以在访问a,除非再次定义a

变量传值:php中有两种方式实现变量传值:值传递、引用传递(类似于C++的引用)

$a=10;	
$b=$a;	//取变量a代表的值,重新存储一份,用变量b保存
$c=&$a;	//取变量a存值的地址,交给变量c存储:两个变量指向同一个内存地址
echo $a, "=", $b, "=", $c;	//输出10=10=10

$b=100;
$c=20;	//此时b为100, a和c是20

php常量
通常以大写字母表示
不需要使用$符号开始
字母数字下划线;不能以数字开头

常量的定义:通常使用define函数或者const关键字,必须在定义时对其赋值
define("PI", 3.14);
const P = 2;

常量的访问
一般符号定义的常量可以直接访问,但是特殊符号 (例如:"-_-") 系统不识别
所有的常量都可以使用constant函数访问
define ("-__-", "hello world");
echo constant("-_ _-");

魔术常量:以双下划线开始和结束的常量,随系统实际环境变化可以改变,但不允许用户和程序员改变。 例:__DIR__ //当前文件所在路径(绝对路径)

在 PHP 中有两个基本的输出方式: echo 和 print
echo - 可以输出一个或多个字符串
print - 只允许输出一个字符串,返回值总为 1
echo和print用法类似。
echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。

php函数
类似于python的函数
不过php函数定义需要以function开头

<?php
function myfunc($x){
	echo $x . "<br>";
}

echo "hello";
myfunc(" world");
?>

超级全局变量(系统预定义变量)
可以在一个脚本的全部作用域访问超级全局变量

$GLOBALS----所有全局变量(唯一一个不以下划线开始的预定义变量)
$_GET-------------用户通过get方式提交的数据
$_POST-----------用户通过post方式提交的数据
$_REQUEST----用户通过get和post提交的数据
$_SERVER-------用户和服务器的基本信息数据
$_FILES----------用户提交的文件数据
$_SESSION----session数据
$_COOKIE-----cookie数据
$_ENV ----------环境变量

$GLOBALS 是一个包含了全部变量的全局组合数组。变量的名字就是数组的键。
特别的,在函数内部定义的globals,在外部也可以使用。

<?php
function func(){
	$GOLBALS['a'] = 1;
}
func();
echo $a;
?>

$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。

$_REQUEST 用于收集HTML表单提交的数据。

$_POST 被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method=“post”。

$_GET 同样被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method=“get”。也可以收集URL中发送的数据。

php数据类型

php是弱类型语言,对变量没有类型,类型是针对于数据来说的
基本数据类型
----整形:十进制、二进制(0b前缀)、八进制(0前缀)、十六进制(0x前缀)
----浮点型
----布尔型:True、False
----字符串型:单引号和双引号都可以。单引号只能解析少量转义字符,而多引号识别较多;
双引号能够解析嵌套在字符串中的php变量。
下标和python一样:从左到右为0开始,从右到左为-1开始
复合数据类型
----数组型
----对象型:存放对象数据
特殊数据类型
----资源型:存储外部资源数据(文件资源、数据库资源)
----空型:变量没有存储任何数据

单引号和双引号的两个结构:nowdoc、heredoc

$str="hey";

nowdoc:单引号形式,不解析嵌套在字符串中的php变量
$str1=<<<'END'
	$str,  world
	I LOVE YOU
END;

heredoc:双引号形式,可以解析嵌套在字符串中的php变量
$str1=<<<END
	$str,  world
	I LOVE YOU
END;

注意:
(1)END结束标记必须写在一行的开头
(2)显示的格式在源码中可见,但是不显示在网页内容中
(3)格式中的注释会被显示到网页中
(4)两个END所在行后面不能由任何东西,包括空格
(5)这里不一定非得是END,也可以是其它的标记

数组

可以使用array关键字来初始化数组
$arr1=array();
$arr2=array('name', 'age');
可以使用括号[]来初始化数组
$arr3=[];
$arr4=['name', 'age'];
可以使用变量和[]初始化数组,但是这时需要给定一个值,而且一次只能添加一个元素
$arr5[]='name';

数组不限定长度,数组元素的值可以是任意数据类型
数组下标可以是纯数字、纯字符串(关联数组)、混合数字和字符串(混合数组)
$arr=array(1=>10, 2=>20, 3=>30, ‘name’=>‘xiaoming’);
如果默认增加元素,系统自动从最大下标开始+1
增加一个小于已有最大下标,系统不会自动根据下标值排序

PHP 数组排序函数
sort() - 对数组进行升序排列
rsort() - 对数组进行降序排列
asort() - 根据关联数组的值,对数组进行升序排列
ksort() - 根据关联数组的键,对数组进行升序排列
arsort() - 根据关联数组的值,对数组进行降序排列
krsort() - 根据关联数组的键,对数组进行降序排列

类型转换有自动转换和强制转换
自动转换和强制转换都不会改变变量的类型

运算符

赋值运算符

算术运算符
除法(/)运算和python相同,结果为浮点类型

错误抑制符
是一种代码保护机制,为了不让用户看到自己不明白的错误。
单目运算,将可能出现的比较低级的错误给抑制,不报错误。
系统依然错误,但是不报错。
@:在可能出现错误的表达式之前使用

比较运算符
===:左边等于右边,且两边数据类型一致则返回True,否则返回False

$a = 10;
$b = '10c';
var_dump($a == $b);	    -->bool(True)
进行比较时,除非是全等,否则系统会自动进行类型转换

飞船运算符
<=>:左边大于右边返回1, 等于右边返回0,小于右边返回-1

合并运算符
用于数据判断取值操作
??:左边表示要判定的表达式,右边表示判定不成功的默认结果
遵循短路运算

<?php
很多时候,用户提交数据会有一些选填部分,用户可以不填使用默认值
$gender = $_GET['gender'] ?? 'male';
如果用户提交了gender信息,那么$gender就保存用户信息;如果没提交,就默认使用male
ench $gender;		当前没有提交gender,所以使用默认的male
?>

逻辑运算符
与(&&)、或(||)、 非(!)
遵循短路运算

连接运算符
用于php中的字符串运算
.=:将左右两边的字符串连接成一个,得到一个字符串类型

$a = 'hello';
$b = 'world';
$c = $a . ' ' . $b;

三目运算符
表达式1?结果1:结果2

自增/自减运算符
++、–:和C语言相同,分前缀和后缀

位运算符
按位与&、按位或|、按位异或^、按位取反~、按位左移<<、按位右移>>(左边补符号位)

流程控制

-----分支结构----

if分支结构

<?php
if (条件判断){
        语句块;
        //exit;      //整个程序终止执行
}else if (条件判断){
        语句块;
}else{
        语句块;
}
?>

switch结构

<?php
switch(n){
	case 1:
		echo $a;
    case 2:
		echo $b;
	default:
		echo $c;
}
?>

----循环结构----

while语句

<?php
while (条件){
    要执行的代码;
}
?>

do while语句

<?php
$i=1;
do{
    echo "The number is " . $i . "<br>";
    $i++;
}
while ($i<=5);
?>

for循环

<?php
for ($i=1; $i<=5; $i++){
    echo "The number is " . $i . "<br>";
}
?>

foreach循环
每进行一次循环,当前数组元素的值就会被赋值给 $value 变量(数组指针会逐一地移动),在进行下一次循环时,您将看到数组中的下一个值.

<?php
$x=array("one","two","three");
foreach ($x as $value){
    echo $value . "<br>";
}
?>

php函数漏洞

MD5 compare漏洞

php在处理哈希字符串时,会利用!===来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。

md5(str)
    QNKCDZO
    240610708
    s878926199a
    s155964671a
    s214587387a
    s214587387a
sha1(str)
    sha1('aaroZmOk')  
    sha1('aaK1STfY')
    sha1('aaO8zKZF')
    sha1('aa3OFF9m')

md5(md5(str)."SALT")
    2

MD5不能处理数组,若有以下判断则可用数组绕过

if(@md5($_GET['a']) == @md5($_GET['b']))
{
    echo "yes";
}
http://127.0.0.1/1.php?a[]=1&b[]=2

ereg函数漏洞:00截断

ereg()函数用指定的模式搜索一个字符串中指定的字符串,如果匹配成功返回true,否则,则返回false。搜索字母的字符是大小写敏感的。

ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE

在这里如果 $_GET[‘password’]为数组,则返回值为NULL
如果为123%00&&&**,则返回值为true
其余为false
可以以用空格来绕过?password= 123


变量覆盖

extract()这个函数在指定参数为EXTR_OVERWRITE或者没有指定函数可以导致变量覆盖

<?php  
    $auth = '0';  
    // 这里可以覆盖$auth的变量值
    extract($_GET); 
    if($auth == 1){  
        echo "private!";  
    } else{  
        echo "public!";  
    }  
?>

parse_str

与 parse_str() 类似的函数还有 mb_parse_str(),parse_str 将字符串解析成多个变量,如果参数str是URL传递入的查询字符串(query string),则将它解析为变量并设置到当前作用域。

//var.php?var=new  
$var='init';  
parse_str($_SERVER['QUERY_STRING']);  
print $var;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

H4ppyD0g

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值