网络安全入门学习第十五课——PHP基础

文章目录

  • 一、WEB技术
    • 1、什么是web
    • 2、B/S架构
    • 3、C/S架构
  • 二、PHP概述
    • 1、PHP是什么
    • 2、PHP受欢迎的原因
    • 3、基于MVC模式的PHP框架
    • 4、常用编译工具
    • 5、PHP环境搭建
    • 6、开发工具
  • 三、PHP基本语法格式
    • 1、标记
    • 2、输出语句
    • 3、注释
    • 4、标识符
  • 四、数据与运算
    • 1、常量
      • 1.1、常量定义
      • 1.2、预定义常量
    • 2、变量
      • 2.1、变量赋值
      • 2.2、超级全局变量
    • 3、数据类型
      • 3.1、标量数据类型
      • 3.2、php 特殊数据类型
      • 3.3、数据类型检测
      • 3.4、数据类型检测函数
      • 3.5、数据类型转换
    • 4、运算符
      • 4.1、算数运算符
      • 4.2、赋值运算符
      • 4.3、比较运算符
      • 4.4、逻辑运算符
      • 4.5、递增递减运算符
      • 4.6、位运算符
      • 4.7、位移运算
      • 4.8、错误运算符
      • 4.9、三元运算符
      • 4.10、运算符的优先级
  • 五、if 语句
    • 1、if` 单分支语句
    • 2、if...else选择结构语句
    • 3、三目运算符实现,if...elseif...else`语句
  • 六、switch 语句
  • 七、while 循环
  • 八、do ...while循环
  • 九、for 循环
  • 十、continue 和break跳转指令
  • 十一、换行
  • 十二、流程替代语法
  • 十三、文件包含语句
    • 1、inclue语句
    • 2、require语句与include语句区别
    • 3、include_once()、require_once()和include()、require()的区别


一、WEB技术

1、什么是web

  • 含义:Web的本意是蜘蛛网,在计算机领域中称为网页
  • 构成:它是一个由很多互相链接的超文本文件组成的系统
  • 资源:系统中每个有用的文件都称为“资源”,并由“通用资源标识符”(URI)进行定位,这些资源通过超文本传输协议(Hypertext Transfer Protocol,HTTP)传送给用户,用户单击链接即可获得资源。

2、B/S架构

  • B/S(Browser/Server)架构:指的是浏览器/服务器端的交互
  • B/S架构则是将浏览器作为客户端,用户只需要安装一个浏览器,就可以访问各种网站的服务,如百度搜索、新浪资讯等。

3、C/S架构

  • C/S(Client/Server)架构:指的是客户端/服务器端的交互
  • 客户端软件是专门开发出来的,如QQ、微信,用户必须安装软件才能使用

PHP运行于服务器端,既可以在C/S架构中为客户端软件提供服务器接口,也可以作为B/S架构来搭建动态网站。


二、PHP概述

1、PHP是什么

  • PHP: Hypertext Preprocessor(超文本预处理器) 是一种通用开源脚本语言. 它是全球网站使用最多的脚本语言之一,全球前100万的网站中,有超过70%的网站是使用PHP开发的,这就是我们为什么要学php的原因,我们希望看懂php的代码好挖漏洞。
  • PHP 脚本在服务器上执行,默认文件扩展名是 “.php”

2、PHP受欢迎的原因

开源免费、面向对象、快捷性、跨平台性、支持多种数据库、PHP中可嵌入HTML,编辑简单、实用性强、程序开发快

3、基于MVC模式的PHP框架

  • 目前有很多流行的基于MVC模式的PHP框架,可以提高开发速度。例如,国外的有Zend Framework、Laravel、Yii、Symfony、CodeIgniter等;
  • 国内也有比较流行的框架,如ThinkPHP。

4、常用编译工具

  • Notepad++的特点是小巧,占用资源较少,非常适合初学者使用。 大家先直接用它就可以了
  • NetBeans和Zend Studio功能强大(相当于python pycharm),但占用较多资源,使用较为复杂,适合专业的开发人员使用。

5、PHP环境搭建

使用 PHP 需要先安装环境,安装环境比较麻烦,需要安装Web服务、PHP应用服务器、MySQL管理系统。

Web服务:apache 和 nginx
PHP:多版本
MySQL:多版本

  • 因为多环境、多版本、多系统,集成包就出现了。集成包(phpStudy、Xampp、宝塔面板、wdcp面板),安装很方便。
  • 只要在您的 web 目录中创建 .php 文件即可,服务器将自动为您解析这些文件。不需要编译任何软件,或安装额外的工具。
  • 由于 PHP 是免费的,大多数的 Web 主机都提供对 PHP 的支持。

6、开发工具

推荐使用vscode,原因:

  1. vscode 可以有函数提示,并且放上去可以提示这个函数干嘛的。
  2. ctrl +/ 自动给你多行注释了,写起来比较方便。
  3. 可以拷贝文件相对路径很方便放到浏览器上执行。

三、PHP基本语法格式

PHP每个语句结束必须写“;”作为结束符

1、标记

由于PHP 是嵌入式脚本语言,它在实际开发中经常会与HTML内容混编在一起,所以为了区分HTML与PHP代码,需要使用标记对PHP代码进行标识

当解析一个文件时,PHP 会寻找起始和结束标记,也就是告诉 PHP 开始和停止解析二者之间的代码。此种解析方式使得 PHP 可以被嵌入到各种不同的文档中去,而任何起始和结束标记之外的部分都会被 PHP 解析器忽略。
网络安全入门学习第十五课——PHP基础_第1张图片

2、输出语句

常用输出语句

echo
print
print_r()
var_dump()
  • echo:可将紧跟其后的一个或多个字符串、表达式、变量和常量的值输出到页面中,多个数据之间使用逗号“,”分隔
  • print:与echo的用法相同,唯一的区别是print只能输出一个值
  • print_r():PHP的内置函数,它可输出任意类型的数据,如字符串、数组等。
  • var_dump():不仅可以打印一个或多个任意类型的数据,还可以获取数据的类型和元素个数
示例:
<?php
echo 'helloworld\r\n';
print 'hello'
?>

3、注释

C++风格的单行注释://
Shell脚本语言风格的单行注释:#
多行注释:/* */

4、标识符

标识符:PHP程序开发中,经常需要自定义一些符号来标记一些名称,如变量名、函数名、类名等,这些符号被称为标识符。

标识符的定义需要遵循一定的规则,具体如下:

  1. 标识符只能由字母、数字、下划线组成,且不能包含空格
  2. 标识符只能以字母或下划线开头的任意长度的字符组成(不包含数字)
  3. 标识符用做变量名时,区分大小写 a , a, a,A
  4. 如果标识符由多个单词组成,那么应使用下划线进行分隔(例如:user_name)
  5. 合法标识符: itcast、itcast88、_itcast、username、password等。
  6. 非法标识符:66itcast、it cast、123、@itcast等。

四、数据与运算

1、常量

常量就是在脚本运行过程中值始终不变的量。是一旦被定义就不能被修改或重新定义。

  • 比如:数学中的圆周率π就是一个常量,其值就是固定且不能被改变的。
    常量遵循标识符的命名规则,默认大小写敏感,习惯上常量名称总是使用大写字母表示。

1.1、常量定义

常量定义方式有两种

  1. define() 函数
举例:
define('PAI', '3.14');
echo '圆周率=', PAI;  // 输出结果:圆周率=3.14

define('R', '5', true);
echo '半径=', R;	    // 输出结果:半径=5
echo '半径=', r;	    // 输出结果:半径=5
  • 首个参数定义常量的名称
  • 第二个参数定义常量的值
  • 可选的第三个参数规定常量名是否对大小写不敏感。默认是 false。
    如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的。
  1. const 关键字
举例:
const R = 6;
const P = 2 * R;
echo 'P=', P;	// 输出结果:P=12

1.2、预定义常量

常量名 功能描述
FILE PHP程序文件名
LINE PHP程序中的当前行号
PHP_VERSION PHP程序的版本,如“7.1.4”
PHP_OS 执行PHP解析器的操作系统名称,如“WINNT”
TRUE 该常量是一个真值(true)
FALSE 该常量是一个假值(false)
NULL 该常量是一个空值(null)
E_ERROR 该常量表示错误级别为致命错误
E_WARNING 该常量表示错误级别为警告
E_PARSE 该常量表示错误级别为语法解析错误
E_NOTICE 该常量表示错误级别为通知提醒
举例:
<?php
echo "PHP程序当前文件路径名: " .__FILE__;
echo "
"
; echo "PHP程序当前行数: " .__LINE__; echo "
"
; echo PHP_VERSION; echo "
"
; echo PHP_OS; ?>

2、变量

概念:变量是用于存储信息的"容器"。
组成:在PHP中,变量是由$符号和变量名组成的。
规则:变量名的命名规则与标识符相同。

举例:
如$number$_it为合法的变量名,而$123、$*math为非法变量名。

2.1、变量赋值

由于PHP是一种弱语言,变量不需要事先声明,就可以直接进行赋值使用。

  • 实现方式:一种是默认的传值赋值,另一种是引用赋值
  • 传值赋值:变量默认总是传值赋值,将“=”右边的数据赋值为左边的变量。
  • 引用赋值:所谓引用赋值就是在要赋值的变量前添加“&”符号。
  • 两种实现方式的区别:传值赋值方式当一个变量值发生改变时,不影响另一个变量;而引用赋值的方式,另一个变量会随之变化。
示例:
<?php
//变量定义
$a=10; //将常量值赋给变量,会为a分配内存空间
$b=$a; //变量赋值给变量,b也分配了内存空间,a和b的内存空间互不干扰
$c=&$a; //引用是不会为c分配空间的,c和a是共用一份空间的。可以把c理解成是一个快捷方式。
echo $a,PHP_EOL;
echo $b,PHP_EOL;
echo $c,PHP_EOL;
$c =99;
echo '重新打印a b c变量,检查哪几个变量值变更了,说明了什么问题',PHP_EOL;
echo $a,PHP_EOL;
echo $b,PHP_EOL;
echo $c,PHP_EOL;
?>

#PHP_EOL 是一个空格,兼容更大平台。

2.2、超级全局变量

PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。 你不需要特别说明,就可以在函数及类中使用。

PHP 超级全局变量列表:

$GLOBALS
$_SERVER
$_REQUEST
$_POST
$_GET
$_FILES
$_ENV
$_COOKIE
$_SESSION
  • 预定义的 $_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请求随着请求的不同它的值是不一样的。

3、数据类型

PHP中支持3类数据类型:

  1. 标量数据类型(Boolean布尔类型、int整型、float浮点型、string字符串类型)
  2. 复合数据类型(array数组、object对象)
  3. 特殊数据类型(resource资源、null空类型)

在PHP中所讲的数据类型指的是变量所保存的数据本身。

3.1、标量数据类型

1)Boolean布尔类型
布尔型是PHP中较常用的数据类型之一,通常用于逻辑判断。
表示事物的“真”和“假”,并且不区分大小写。

2)int整型
整型可以由十进制、八进制和十六进制数指定,用来表示整数

  • 1、在它前面加上“-”符号,可以表示负数。
  • 2、八进制数使用0~7表示,前缀为0
  • 3、十六进制数使用0-9与A~F表示,以0x为前缀
举例:
<?php
    $number = 0;
    var_dump($number);
    echo '
'
; $number = 67; var_dump($number); echo '
'
; $number = -322; var_dump($number); echo '
'
; $hex = 0xa; //将16进制转换为10进制 var_dump($hex); echo '
'
; $oct = 012; //将8进制转换为10进制 var_dump($oct); ?>

3)float浮点型
浮点数是程序中表示小数的一种方法,或是指数形式。
通常使用标准格式和科学计数法格式表示。

4)string字符串类型
概念:字符串是由连续的字母、数字或字符组成的字符序列。
表示方式:分别为单引号、双引号、heredoc语法结构和nowdoc 语法结构。

注意:双引号里面可以解析变量,单引号输出字符串,单引号跟双引号区别,对比下面两个输出:


	$str1='I like php';
	$str2="I like php";
	echo $str1;
	echo '
'
; echo $str2; ?> 输出结果: I like php I like php

	$test='php';
	$str1='I like $test';
	$str2="I like $test";
	echo $str1;
	echo '
'
; echo $str2; ?> 输出结果: I like $test I like php

!注意:双引号包裹起来的表达式中间如果存在“$”符号,是会自动检索这个变量的值。

5)php中字符串拼接:
1、PHP中可以使用字符串连接符.来拼接字符串,它可以把两个或两个以上的字符串拼接成一个新的字符串。
2、字符串拼接有两种形式,分别是直接使用字符串连接符.和赋值运算符.=

3.2、php 特殊数据类型

NULL 值表示变量没有值。NULL 是数据类型为 NULL 的值。

NULL 值指明一个变量是否为空值。 同样可用于数据空值和NULL值的区别。

可以通过设置变量值为 NULL 来清空变量数据。
在下列情况下一个变量被认为是NULL:

  1. 被赋值为NULL。
  2. 尚未被赋值。
  3. 被unset()。

3.3、数据类型检测

PHP中变量的数据类型通常不是开发人员设定的,而是根据该变量使用的上下文在运行时决定的。常使用var_dump()函数

3.4、数据类型检测函数

PHP中提供了许多检测数据类型的函数,但大致可以分为两种:gettype()函数和is_*()类函数。

is_*()如果检测的值符合检测的数据类型,则返回true,否则返回false。

is_*函数

函数名称 功能描述
is_bool() 检测是否属于布尔类型
is_string() 检测是否属于字符串类型
is_float() 检测是否属于浮点类型
is_int() 检测是否属于整型
is_null() 检测是否属于空值
is_array() 检测是否属于数组
is_resource() 检测是否属于资源
is_object() 检测是否属于对象类型
is_numeric() 检测是否属于数字或数字组成的字符串

3.5、数据类型转换

时机:在PHP中,对两个变量进行操作时,若其数据类型不相同,则需要对其进行数据类型转换。

分类:通常情况下,数据类型转换分为自动类型转换和强制类型转换。

1、自动类型转换,指的是当运算需要或与期望的结果类型不匹配时,PHP将自动进行类型转换,无需开发人员做任何操作。
分类:最常见的有3种,分别为转换成布尔型转换成整型和转换成字符串型
网络安全入门学习第十五课——PHP基础_第2张图片

2、强制类型转换,就是在编写程序时手动转换数据类型,在要转换的数据或变量之前加上“(目标类型)”即可。
网络安全入门学习第十五课——PHP基础_第3张图片

4、运算符

运算符,专门用于告诉程序执行特定运算或逻辑操作的符号。根据运算符的作用,可以将PHP语言中常见的运算符分为9类

运算符类型 作用
算术运算符 用于处理四则运算
赋值运算符 用于将表达式的值赋给变量
比较运算符 用于表达式的比较并返回一个布尔类型的值,true或false
逻辑运算符 根据表达式的值返回一个布尔类型的值,true或false
递增或递减运算符 用于自增或自减运算 += php有++
字符串运算符 用于连接字符串 .
位运算符 用于处理数据的位运算
错误控制运算符 用于忽略因表达式运算错误而产生的错误信息
instanceof 用于判断一个对象是否是特定类的实例

4.1、算数运算符

是用来处理加减乘除运算的符号,也是最简单和最常用的运算符号
网络安全入门学习第十五课——PHP基础_第4张图片
注意:++aa++,++a相当于a这个变量先自增后运算,a++就相当于先运算后自增。

4.2、赋值运算符

是一个二元运算符,即它有两个操作数。它将运算符右边的值 赋给左边的变量
网络安全入门学习第十五课——PHP基础_第5张图片
例子:
$a = $b = c = 5 ; ①将 5 赋值给变量 c = 5; ①将5赋值给变量 c=5;5赋值给变量c
②再把变量 c 的值赋值给变量 c的值赋值给变量 c的值赋值给变量b
③把变量 b 的值赋值变量 b的值赋值变量 b的值赋值变量a,表达式赋值完成

$i += 1;		
等价于:
$i = $i + 1;

$str .= 'Tom';	
等价于:
$str = $str . 'Tom';

4.3、比较运算符

是用来对两个变量或表达式进行比较,其结果是布尔类型的true或false
网络安全入门学习第十五课——PHP基础_第6张图片
注意:=====的区别,==是比较内容,===不单比较内容还比较类型

4.4、逻辑运算符

是在程序开发中用于逻辑判断的符号,其返回值类型是布尔类型。就是常说的:与、或、非
网络安全入门学习第十五课——PHP基础_第7张图片

4.5、递增递减运算符

也称作自增自减运算符,可被看作是一种特定形式的复合赋值运算符
网络安全入门学习第十五课——PHP基础_第8张图片

  • “+ +”或“- -”放在操作数的前面,则先进行自增或自减运算,再进行其他运算。
  • “+ +”或“- -”放在操作数的后面,则先进行其他运算,再进行自增或自减运算。

4.6、位运算符

是针对二进制数的每一位进行运算的符号,它专门针对数字0和1进行操作。
网络安全入门学习第十五课——PHP基础_第9张图片

按位与(都是1才是100000110
&     00001011
——————————————————
      00000010

按位或(有一个是1就是100000110
|  00001011
——————————————————
   00001111

按位非(全部取反)
~    00000110
——————————————————
     11111001

按位异或(两个值都相同就是0,两个值不相同就100000110
^    00001011
——————————————————
     00001101

4.7、位移运算

是针对二进制数的每一位进行左移或者右移

左移:
     00001011         <<1
——————————————————
     00010110

右移:
      00001011         >>1
——————————————————
      00000101

4.8、错误运算符

PHP的错误控制运算符使用 @ 符号来表示,把它放在一个PHP表达式之前,将忽略该表达式可能产生的任何错误信息。

简单来说就是强制执行代码,忽略错误,不报错

4.9、三元运算符

格式:(expr1) ? (expr2) : (expr3)
对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。

自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。

4.10、运算符的优先级

左结合方向表示同级运算符的执行顺序为从左到右

右结合方向则表示执行顺序为从右到左

与、或、非优先级是:not > and > or


五、if 语句

1、if` 单分支语句

网络安全入门学习第十五课——PHP基础_第10张图片

2、if…else选择结构语句

网络安全入门学习第十五课——PHP基础_第11张图片

3、三目运算符实现,if…elseif…else`语句

网络安全入门学习第十五课——PHP基础_第12张图片


六、switch 语句

概念:switch语句也是多分支语句,功能与if系列条件语句相同,不同的是它只能针对某个表达式的值作出判断,从而决定执行哪一段代码。
网络安全入门学习第十五课——PHP基础_第13张图片


七、while 循环

while循环语句,是根据循环条件来判断是否重复执行这一段代码的
网络安全入门学习第十五课——PHP基础_第14张图片


八、do …while循环

概念:do…while循环语句的功能与while循环语句类似

唯一的区别在于,while是先判断条件后执行循环体,而do…while会无条件执行一次循环体后再判断条件

网络安全入门学习第十五课——PHP基础_第15张图片


九、for 循环

for循环语句是最常用的循环语句,它适合循环次数已知的情况

for关键字后面小括号“()”中包括了三部分内容

  1. 初始化表达式
  2. 循环条件
  3. 操作表达式

它们之间用“;”分隔,{}中的执行语句为循环体

举例:

求0-100之间奇数之和:
    $sum=0;
    for($i=0;$i<=100;$i++) {
    if($i%2==1){
    $sum+=$i;
    } }
    echo $sum;
    ?>0-100之间偶数之和:
    $sum=0;
    for($i=0;$i<=100;$i+=2) {
    $sum+=$i;
    }
echo $sum;

十、continue 和break跳转指令

continue语句与break语句的区别在于,前者continue用于结束本次循环的执行,开始下一轮循环的执行操作;后者break 用于终止当前循环,跳出循环体。

break语句可应用在switch和循环语句中,其作用是终止当前语句的执行,跳出switch选择结构或循环语句,执行后面的代码。


十一、换行

PHP 中换行可以用 PHP_EOL


来替代,以提高代码的源代码级可移植性


十二、流程替代语法

大量的HTML与PHP代码混合编写时,为了方便区分流程语句的开始和结束位置,可以使用PHP提供的替代语法进行编码。

<!-- 输出1~99之间的偶数 -->
<ul>
    <?php for ($i = 1; $i < 100;  ++$i){ ?>
        <?php if ($i % 2 == 0){ ?>
            <li> <?=$i?> </li>
        <?php } ?>
    <?php } ?>
</ul>

<!-- 输出1~99之间的偶数 -->
<ul>
    <?php for ($i = 1; $i < 100;  ++$i): ?>
        <?php if ($i % 2 == 0): ?>
            <li> <?=$i?> </li>
        <?php endif; ?>
        <?php if ($i % 2 == 0): ?>
            <li> <?=$i?> </li>
        <?php endif; ?>
    <?php endfor; ?>
</ul>

备注:“”是短标记输出语法,自PHP 5.4起短标记关闭的情况下仍然可用

流程控制(包括 if,while,for,foreach,switch)这几个语句有替代语法。
左花括号{换成冒号:,把右花括号}分别换成 endif;endwhile;endfor;endforeach; 以及 endswitch;


十三、文件包含语句

作用:在程序开发中,会涉及到多个PHP文件。为此,PHP提供了包含语句,可以从另一个文件中将代码包含进来。只需要写对文件的路径。

有哪些包含语句:
include、require、include_once、require_once

当正常执行的时候被包含文件的变量才可以引用到。

1、inclue语句

具体语法:include '文件路径';
“文件路径”指的是被包含文件所在的绝对路径相对路径

  • 所谓绝对路径就是从盘符开始的路径,如“C:/web/test.php”。
  • 所谓相对路径就是从当前路径开始的路径,假设被包含文件test.php与当前文件所在路径都是“C:/web”,则其相对路径就是“./test.php”。

在相对路径中,./表示当前目录,../表示当前目录的上级目录。

2、require语句与include语句区别

include()引入文件时,如果找不到文件 include语句会发生警告信息并继续执行;require()引入文件时文件不存在会发生致命错误,程序终止执行

require()语句一般放在php脚本页面的最前边,在php执行前,先读入require()引入的文件,文件的内容会变成此脚本的一部分,但是出现错误,会立即退出。

include()语句一般在用到时才引入,所以经常是在流程控制的处理区段中,php脚本在执行到它时,才会将文件包含进来。

也就是说require()是预加载机制,位置在脚本的最前边,一开始就引入所有可能用到的文件;include()是即用即加载,位置灵活。

3、include_once()、require_once()和include()、require()的区别

include()、require()执行包含的文件,不会对引入的文件进行比较判断,可能会出现重复包含的情况;

include_once()、require_once()会在包含时先判断文件是否存在,已经包含过了就不在包含,这样的引入方式可以节约资源,又可以避免重复定义。


你可能感兴趣的:(web安全,PHP,学习,php)