web基础入门和php语言基础入门 二
- MySQL入门-续
- MySQL之数据查询操作
- MySQL其他知识点
- php语言基础入门
- 认识PHP
- PHP的工作流程
- 安装PHP环境
- 认识一个PHP程序
- PHP基础知识点
- 进入正题
- PHP与WEB交互
- PHP与MySQL交互
- 总结
MySQL入门-续
MySQL之数据查询操作
- WHERE 子句,条件限制语句:
SELECT *或其他 FROM 数据表(可以是多个) WHERE 需要满足的条件
SELECT NAME FROM VULN WHERE NAME="ecoloy";
SELECT * FROM VULN WHERE NAME="ecoloy";
首先,我先插入了几条数据。
然后我进行了限制查询,从 vuln
数据表中的 name
字段下筛选出来 NAME="ecoloy"
数据。
第二句话是,从 vuln
数据表中的所有字段下筛选出 NAME="ecoloy"
的数据。
对数据还可以进行 AND
和 OR
限制。
AND
代表两个条件都要满足。
OR
代表满足其中一个条件即可。
SELECT * FROM VULN WHERE NAME="ecoloy" and ID=5;
SELECT * FROM VULN WHERE NAME="ecoloy" OR ID=5;
2、ORDER BY 子句,排序语句:
SELECT *或其他 FROM 数据表(可以是多个) ORDER BY 字段 ASC/DESC;
ASC
是升序排序, DESC
是降序排序。
我们可以使用数字来进行判断列长度,比如:
SELECT * FROM VULN ORDER BY 4;
3、UNION 子句,联合查询
所谓联合查询,就是查询不同的两个表,将要查询的信息合并显示。
联合查询有两个子句:
UNION 子句 :查询后不显示重复数据
UNION ALL 子句 :查询后会显示重复数据
SELECT *或其他 FROM 数据表1 UNION SELECT *或其他 FROM 数据表2;
select name,desname from vuln union select name,password from users;
MySQL其他知识点
1、MySQL的注释: #
从这开始到后面, --
从这开始到后面 , /*
这全是注释*/
2、常见的内置函数
database() : 显示当前数据库名称
current_user : 显示当前用户
version() : 显示当前数据库版本
load_file() : 显示一个文件内容
into outfile : 写入文件
学习一下 load_file() 与 into outfile 的使用
php语言基础入门
认识PHP
PHP(Hypertext Preprocessor ,超文本预处理语言),是一种通用开源脚本语言。主要用于WEB开发领域,其语法吸收了C语言,JAVA和Perl的特点。PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。
上面这段话来自较官方说法,其实对于PHP来说,就是常用在WEB领域的开源脚本语言,作为中间人的角色处理WEB数据,或是处理请求数据,或是返回数据。比如说,我们常见的登录过程,输入账号密码,点击提交后,我们所请求的数据是先经过PHP来处理,然后再去数据库进行操作查询处理,查询处理过后再返回给PHP,PHP再经过处理后返回到前端页面,即呈现在我们眼前的浏览器页面。简言之,PHP在WEB中充当中间人的角色,它主要处理WEB数据。
其他:在一整套WEB中,要有操作系统,WEB服务器,后端处理语言,以及数据库。操作系统就是我们常见的Windows,Linux,Ubuntu等。WEB服务器常见的是Apache,Tomcat,Windows Server等。后端处理语言,有PHP,JSP,ASP,Python等,数据库有MySQL,Oracle,SQL server等。
PHP的工作流程
用语言简述了PHP的工作流程,加深印象,不妨看看下面这张图:
上面这张图,是我们浏览网页基本工作流程,我将其分为了六个步骤:
第一步:我们上网,浏览页面,通过HTTP协议向Web服务器请求数据。
第二步:我拿的Apache举例,它接收到数据后,转交给PHP来处理这些数据。
第三步:PHP与数据库交互,比如Mysql,通过查询或其他操作访问数据
第四步:数据库将访问操作的数据返回给PHP让它再去处理。
第五步:PHP再去处理这些数据,整理成我们网页能看到的样式,然后返回给Web服务器。
第六步:Web服务器接收到了PHP整理好的数据后,将其打包成HTTP协议返回给我们。
安装PHP环境
PHP环境安装
1、Windows下安装:
在Windows下安装PHP环境的话,我们首选PHPstudy,将PHP所需环境一键部署,省时省力。关于版本,我们下载最新版本。即 phpStudy v8.0版本从官网下载,一路下一步即可。
官方网址:
https://www.xp.cn/download.html
Linux下安装:
较比于Windows下安装,Linux下安装PHP还需要安装所需的WEB服务器,数据库,想对于麻烦一些。但却可以从搭建中,清晰了解WEB基本架构是怎样的的,对后期学习是有
一定帮助的。
Ubuntu下安装:
https://www.cnblogs.com/xpwi/p/9818751.html
or
bing,百度搜索
注意:在Ubuntu下或是在Centos下,或是其他Linux系统版本下搭建是有区别的。可以根据自己具体需求查阅相关资料。
说明:
- 关于搭建PHP环境,是基于在服务器上,单一的PHP脚本是运行不了的,一定要放在服务器上。
- 关于PHP程序编写,大家可以下载phpstorm,专业软件编写PHP,以及调试PHP。
- 对于练习来说,我使用的是Visual Studio Code 文本编辑器,编写好程序后,放入到服务器根目录,打开对应路径,即可。
认识一个PHP程序
现在,我们对PHP有了大致的了解,也搭建完了PHP所需的环境。
那么,我们不妨来个实际例子,对它再进一步的认识。
然后,我们再去学习 PHP基础知识点 。
大家先去这个地方下载我们第一个PHP脚本
https://github.com/Kevil-hui/BestShell
接下来,将脚本复制粘贴到网站根目录中:
我们打开浏览器,输入路径,打开这个脚本:
我们可以看到,这个脚本执行了很多内容,都是一些很敏感的内容,有些朋友肯定已经知道了这个脚本的作用了,以及它们的特有的名称了(有些敏感,大家知道就好)。这就是一个PHP脚本,它所执行的功能,大家可以实际去操作一下,是不是很有趣。
为什么先看个这个例子,为了激发大家的兴趣,看懂看不懂先放一边,后面学习了基础语法,都会懂得。兴趣驱使学习,入门是挺枯燥
注意:
我们在输入路径时,后面端口我设置的为 7089 ,大家可以根据自己需求设置:
注意:
请大家不要使用该脚本当任何Webshell,请勿用于非法行为,本例子目的为了学习了解PHP,请大家遵守网络安全法。
PHP基础知识点
现在进入PHP基础知识点环节,这个部分稍微有些多,都是基本知识点,有其他语言的基础的朋友,大致看一下就会学习很多,语言语法都是如此相似。没有学过其他语言的朋友们,看完这些基础点后,建议大家根据自己能力拓展学习,掌握两三门语言是非常有必要的。
进入正题
- 变量与其数据类型
变量,在编程语言中是最基础的概念,其意思为一种可变化的量。可根据你所需将其赋值的量。
这个变化就是根据你的需求而变化的。
变量使用规则:
1、变量必须以 $ 美元符号开始
2、变量不能使用数字字符开头
3、变量开头可以下划线 _ 开始
4、变量名不能是PHP常用的关键字
5、在PHP中对变量大小写敏感,$a 与 $A 是两个变量
举个例子:
<?php
$a = 1;
$b = "7089bAt";
echo $a;
echo '<br>';
echo $b;
echo '<br>';
$c = 5;
$d = 6;
$e = $c + $d;
echo $e;
?>
输出结果:
解读:
在上面代码中,我们可以看到使用了 = 等于号进行赋值,是的,几乎在常见的语言中,都是使用等号进行赋值,即把右面的数据’给’右面,这时 $a
不在孤独了,它有了整型 1
的陪伴,而 $b
也有了字符串 7089bAt
的陪伴,还有下面的那些变量。在下面我用了个最最最简单的计算,来让大家了解一些变量最基本的作用。在程序中,可以对不同类型变量,进行不同的操作,下面我们会了解到变量有哪些数据类型。
在进行变量操作时,已声明的变量会被计算机内存分配一块区域存放你所赋的值,即$a
在内存中有一小块区域,其里面存放着 1
这个整型。以后你再去使用变量 $a
时,你知道它是个整型 1
,所以你可以根据你的需求来使用它。当然,这个值是可以根据你的需求变化的,而且$a
这个变量只在本代码段里的值是 1
。
- 变量的数据类型
在上面我提到了,整型,字符串,其实这是变量的数据类型。在PHP中的变量数据类型有这些:
四种标量类型:
布尔型(boolen)
整型(integer)
浮点型(float)
字符串(string)
两种复合类型:
数组(array)
对象(object)
两种特殊类型:
资源(resource)
Null
详细介绍:
对于下面这四种常用的标量数据类型,大家需要知道它是什么,怎么用即可。
- 布尔型(boolen)
四种标量类型之一。它只有两个值,真(True)和假(False)。在PHP中,可以将任何类型的值都转换为真或假。比如:整型数值零(0)为假,浮点型(0.0)为假,空白字符串(“”)为假等等。
举个列子:
<?php
$a = true;
if($a == true){
echo "<h1>墨羽</h1>";
}
?>
解读:
布尔类型常在条件语句中使用,具体条件语句使用,下面会说到。我们先解读下上面这
句话什么意思:
首先,将 $a
赋值为 true
,接下来,在条件语句中的条件判断处进行判断,即 $a == true
,(==
两个等于号是判断的意思, = 一个等于号是赋值的意思,不要混淆)。我们已经将 $a
赋值为 true
了,所以说 $a == true
条件是成立的,既然这样,下面就会执行 echo "<h1>墨羽/h1>";
这句话。所以根据输出结果看,就是想浏览器输出了墨羽这几个字。
上面是最基本的条件语句,下面还要学习其他条件语句。
是想浏览器输出了墨羽这几个字。
上面是最基本的条件语句,下面还要学习其他条件语句。
- 整型(integer)
四种标量类型之一。其数据类型只能为整数 - 正整数或负整数。
具体数值会有一个区间,具体可看:
https://www.php.net/manual/zh/language.types.integer.php
比如:$a=3.14;
,$b=-0.12;
,$c=70.89;
这些都是浮点型、 - 字符串(string)
四种标量类型之一。字符串,即连续的字符序列,可以是数字,字母或符号。
定义字符串的三种方式: - 单引号(’ ')
$a = 'moyv';
- 双引号(" ")
$b = "moyv";
- 定界符(<<<)
定界符用于定义格式化的大文本,其输出格式会按照你在定界符中所敲打的形式输出。
使用方法:
<<<str
格式化文本
str;
举个列子:
<<<test
墨羽
我是moyv
是兄弟,就来砍我。
test;
解读:
其中test为自定义的标识符,结束的标识符必须在新的一行开头,并且不要忘记 ; 。
注意:
单引号与双引号定义字符串区别:
在单双引号中包含变量名时,双引号会将其变量的值输出,而单引号只会把它当做普通的字符输出。
在PHP中,有个函数,即 - var_dump(变量名)可以查看数据类型。
具体使用如图:
- 常量
常量在脚本中是初始化的值,不会变的值。一般在程序中定义了常量之后,在整个程序中这个值都是固定有效的。
自定义常量
关键字 - define()
define(string constant_name, mixed value, case_sensitive=true)
参数(string constant_name):必选参数,常量名称。
参数(mixed value):必选参数,常量的值。
参数(case_sensitive=true):可选参数,指定是否大小写敏感,true为不敏感。
获取常量值
关键字 - constant(),defined()
1、constant(string constant_name)
参数(string constant_name):常量的名称
指定获取某常量,如果成功,返回正常值,如果失败,则提示错误信息(常量没有被定义)
2、defined(string constant_name)
参数(string constant_name):常量的名称
指定获取某常量,如果成功,返回true,如果失败,返回false
举个列子:
这张图片截图是 认识一个PHP程序 的那个脚本开头,大家来理解一下常量,变量。记
住这个格式,具体情况下再应用,就会更加熟悉了。
备注:
什么是关键字,是程序中保留字,每个字符都有特定的含义,在处理程序时,它只认得这些关键字,也会根据关键字处理相应功能。
- 运算符与表达式
运算符
运算符,是对常量,变量或数据进行计算的符号。比如,前面我们最开始了解变量时,使用的=
,是赋值运算符,还有==
,是比较运算符,除了这些还有很多运算符,有不同的作用。
在PHP中,有以下运算符:
算术运算符
字符串运算符
赋值运算符
比较运算符
条件运算符
递增或递减运算符
位运算符
逻辑运算符
下面我简单讲讲几个运算符:
算术运算符:就是常见的 加,减,乘,除,取余
,所使用的的符号为 +,-,*,/,%
字符串运算符:就是对字符串进行基本操作,比如,使用英文句号.
,是将两个或多个字符串连接起来形成一个新的字符串。
比较运算符:就是对变量或表达式的值进行大小,真假的比较,根据其比较返回true
或者false
。
逻辑运算符:
这个在程序中是比较中要的一种运算符。
记住下面条件为真的情况,在后面自己写程序时,熟练操作几遍就会对这个简单的概念有很深刻的理解
&&或and:($a && $b)逻辑与,当两者都为真时,结果为真
||或or:($a || $b)逻辑或,但两者其中一者为真的时候,结果为真
!:逻辑非,(!$a)是个英文的感叹号,当$a为假时,结果为真
xor:逻辑异或,($a xor $b),当$a,$b为一真一假时,结果为真
关于逻辑运算符的使用,我们在下面理解了条件语句后,配合实例加深理解。
更多运算符符号,以及使用方法,还有他们的运算优先级,大家可以看这篇文章:
https://www.runoob.com/php/php-operators.html
表达式
表达式,是PHP语言的基本元素,它是将运算符和操作数连接起来的式子成为表达式,听起来很绕,其实 $a=7089 ,这个赋值操作就是最简单的表达式,还有上面逻辑运算符两者比较,也是表达式。
关于表达式,多搭配用于条件语句,循环语句。具体实例,看下面。
- 条件判断语句
在上面多次提到条件语句,以后在编写程序时,我们以后常用到条件语句。而且会与一些表达式,搭配使用,关系相当密切。
那么什么是条件语句,其实就是对一件事的判断,根据判断结果做出一项选择。比如抛硬币,如果正面朝上,我亲你,如果反面朝上,你亲我。这就是一个简单的条件语句的判断。(虽然很不要脸 -.-)
具体在程序中使用,是下面这样的。
- 条件表达式关键字 if,if…else,switch…case
- if语句
- if语句是最简单的条件判断语句,它判断一个条件,如果条件成立,就执行下面语句,如果不成立,则跳过这段程序,执行下面程序。
举个例子:
<?php
$a=1;
$b=1;
if($a == $b){
echo "haha,我们两是一对";
}
?>
这段if语句,条件单一,运行结果单一,意思为:如果两个变量相等,就输出下面那句
话,使用到了 == 两个等号,也就是比较运算符。
- if…else语句
- if…else语句有了两个结果,他判断一个条件,如果条件成立就执行 if 下面的语句,如果条件不成立的,就执行 else 下面的语句
举个例子:
<?php
$a=1;
$b=2;
if($a == $b){
echo "haha,我们两是一对";
}
else{
echo "可惜我们不是一对";
}
?>
这段 if…else 语句理解起来也非常容易,针对一个条件进行判断,成立与否返回其
中一个结果。要么他们两是一对,要么不是一对。
- if…else if…else多条件语句
- 多条件语句根据成立的条件不同来返回结果。下面用最经典例子来进行理解。
举个例子:
- 多条件语句根据成立的条件不同来返回结果。下面用最经典例子来进行理解。
<?php
$chengji = 99;
if($chengji >=90){
echo "你真棒,";
}
elseif($chengji >=80){
echo "继续努力";
}
elseif($chengji >=70){
echo "多多努力";
}
elseif($chengji >=60){
echo "加油鸭!";
}
else{
echo "小明同学,你终于不及格了!";
}
?>
这段代码,大家运行以下,修改不同数值,来观察一下其中不同的结果。
- switch…case语句
- switch…case分支控制语句,对于一个条件进行判断,根据结果和case中的值对比,如果相等,就执行对应的语句。直到switch语句结束或遇见break。
举个例子:
<?php
$ta = "xiaoli";
switch($ta){
case "xiaoli":
echo "小li人好";break;
case "xiaozhang":
echo "小zhang个高!";break;
case "xiaowang":
echo "小wang白净";break;
case "xiaozhao":
echo "小zhao腿长";break;
default:
echo $ta."同志是谁?";break;
}
?>
这段代码,是使用 switch…case 语句,先设置一个变量其值如上,然后使用该和case 下设定的值比较,如果比较条件成功,就会执行响应的语句,如果设置了一个case没有的值,就会执行 default 下的语句。
在这段代码中,出现了个 break ,它也是PHP中的关键字,它的意思是跳出这次执行,跳出switch语句。如果不使用 break 的话,程序自动执行完剩下的代码,然后退出。大家可以将 break 删除,自行调试,观察结果。
- 循环语句
了解完条件判断语句,现在要接触循环语句。
所谓循环,哲学点说,某件事物周而复始的运动或变化。
在程序语言中的循环,是个闭环,从头开始到结尾然后再从头开始。比如说你围绕着操场跑步,如果按照规定圆圈路线进行,你必然会回到起点,然后又从起点开始,计算新的一圈。在程序中,很多都是如此。
在PHP语言中有四种循环结构,分别是:while
循环 ,do...while
循环 ,for
循环 ,foreach
循环 。
- while循环
- 只需单一的条件,如果条件成立,就循环执行代码块
格式:
- 只需单一的条件,如果条件成立,就循环执行代码块
while(条件){
要执行的代码;
}
举个例子:
<?php
$a = 0;
while($a <= 10){
echo "第".$a."次循环的数字是:".$a."<br>";
$a++;
}
?>
运行结果:
解读:
大家看运行结果,可以看到代码运行了十一次。首先我给变量 $a
的值设置为了0
,接下来就是 while
循环 部分,它设定的条件为 $a <= 10
,就是变量这个数字 小于或等于10
的时候停止循环,既然一开始设定的变量为0
,肯定小于10
,那就就执行下面代码。大家看到里面有个 $a++
,这段简单的表达式,它的意思是,对变量 $a
进行 自加1
,拓展开来就是 $a=$a+1
。这样的话,变量一开始为0
,进入一次后加了1
后就变为1
,然后继续进行第二次判断,还是小于10
,那就就继续执行下面代码,直到变量$a
自加到10
的时候与条件相等,此时就会终止循环。
- for循环
- 给定指定条件,按照规定执行代码块。
格式:
- 给定指定条件,按照规定执行代码块。
for (初始值; 条件; 增量)
{
要执行的代码;
}
举个例子:
<?php
for($a=0;$a<=9;$a++){
echo "第".$a."次循环的数字是:".$a."<br>";
}
?>
运行结果:
解读:
大家可能发现了,这个例子和 while循环 那个一样,只不过换了 for循环 。我们可以对比一下发现,其实在这两个循环中都有三个条件,初始值,循环条件,以及变量的递增或递减方式。 for循环 只不过将这三个条件集合在了一个地方编写。但在实际应用
时还会多少有些出入,根据实际情况再决定用哪个。
for循环 ,还可以嵌套循环,在第一层循环下,再加入一层循环。大家可以自己试试写个9*9乘法口诀。
- foreach循环
- 只用于循环数组,可遍历每个数组中的键值对。
格式:
foreach ($array as $value)
{
要执行代码;
}
举个例子:
<?php
$num=array("1234","12","34");
foreach ($num as $value)
{
echo $value . "<br>";
}
?>
大家可以运行这段代码,观察一下结果。
关于数组,是数据类型中的复合类型。它能够在一个变量中存储一个或多个值,并且能通过索引号访问对应的值。要注意的是,数组索引号是从零(0)开始。零(0)就是第一位。
三种数组类型:
索引数组 - 带有数字索引的数组
关联数组 - 带有指定键的数组
多维数组 - 包含一个或多个数组的数组
- 声明数组关键字 - array()
索引数组:
要注意的是,索引数组索引号是从零(0)开始。零(0)就是第一位。
$a = array("1","2","3");
关联数组:
$num=array("one"=>"1","two"=>"2","three"=>"3");
在很多过滤一些sql注入语句,xss等都会将要过滤的语句写进数组中,便于管理。这么多过滤语句总不能都一个个声明变量吧。
- 函数
函数,在每个程序语言中都及其重要,它将不同功能代码打包成不同的代码块,极大减少了代码的冗杂。
就像我们学的那些数学公式,拿来套用,代数即可算出想要的结果。函数亦是如此,不同函数你可以定义不同功能,用到哪个功能就选择哪个函数,方便简单,极大的提高了代码的复用性。
定义函数:
关键字:function
格式:
function 函数名(参数1,参数2,...参数n){
函数体,具体代码
[return 参数];
}
举个例子:
#一个简单的计算:
<?php
function jisuan($canshu1,$canshu2){
$result = $canshu1 + $canshu2;
return $result;
}
echo jisuan(70,89);
?>
运行结果:
解读:
这是一个非常简单函数,计算两个数之和,在这个代码中有几个地方需要注意:
jisuan(70,80)
:是函数的利用方式。
$canshu1,$canshu2
:这是两个形式参数,可以理解为一个记号,在利用函数时,要传入两个参数才能计算, $canshu1
和 $canshu2
分别对应着,70和89(这两个参数又是参数是实际数值,它是实际参数),然后进入函数体中,对这两个数字进行计算。
return $result;
:是将计算的结果的值返回,并结束函数的运行。
形式参数
:如果函数需要传入参数,需要用到形式参数,也可以理解为记号,标志。
实际参数
:在向函数传入实际参数时,所传入的参数值是实际参数。
函数也可以是没有参数的,也可以不返回值。对于函数这方面,在理解了基础知识点后,要多进行代码实践,多敲代码,多看代码,才能运用更熟练。
在函数之后,还有一个比较抽象的概念 - 面向对象。
关于这个点,大家可以了解和实战了基础代码后,进行学习,这个概念比较抽象,只有多练习相应代码,才能理解更加透彻。
多敲,多练,欲速则不达。
- 字符串操作
字符串是什么,在前面说到了,是一串连续的字符,在PHP中用单引号,或者双引号,将其引起来。
当然,还可以对字符串进行很多操作,处理。举个例子来说,moyv
是个字符串,我想将对这个字符翻转过来,可以用到特定的函数 strrev() 来操作。
举个实际例子,下面会讲到PHP与WEB交互,PHP使用特定预定义的数组来接收WEB发来的HTTP协议数据,这些发来的数据,基本都是字符串,对于这些字符串我们要进行响应处理,比如说POST方式发来的数据,如果要想防止SQL注入,我们可以对字符串进行一些相关操作,防止SQL注入。这只是一个简单的小实例,更多用法,需要你学习更多了解更多,来自己理解。
php字符串处理函数
addcslashes — 为字符串里面的部分字符添加反斜线转义字符
addslashes — 用指定的方式对字符串里面的字符进行转义
bin2hex — 将二进制数据转换成十六进制表示
chop — rtrim() 的别名函数
chr — 返回一个字符的ASCII码
chunk_split — 按一定的字符长度将字符串分割成小块
convert_cyr_string — 将斯拉夫语字符转换为别的字符
convert_uudecode — 解密一个字符串
convert_uuencode — 加密一个字符串
count_chars — 返回一个字符串里面的字符使用信息
crc32 — 计算一个字符串的crc32多项式
crypt — 单向散列加密函数
echo — 用以显示一些内容
explode — 将一个字符串用分割符转变为一数组形式
fprintf — 按照要求对数据进行返回,并直接写入文档流
get_html_translation_table — 返回可以转换的HTML实体
hebrev — 将Hebrew编码的字符串转换为可视的文本
hebrevc — 将Hebrew编码的字符串转换为可视的文本
html_entity_decode — htmlentities ()函数的反函数,将HTML实体转换为字符
htmlentities — 将字符串中一些字符转换为HTML实体
htmlspecialchars_decode —htmlspecialchars()函数的反函数,将HTML实体转换为字符
htmlspecialchars — 将字符串中一些字符转换为HTML实体
implode — 将数组用特定的分割符转变为字符串
join — 将数组转变为字符串,implode()函数的别名
levenshtein — 计算两个词的差别大小
localeconv — 获取数字相关的格式定义
ltrim — 去除字符串左侧的空白或者指定的字符
md5_file — 将一个文件进行MD5算法加密
md5 — 将一个字符串进行MD5算法加密
metaphone — 判断一个字符串的发音规则
money_format — 按照参数对数字进行格式化的输出
nl_langinfo — 查询语言和本地信息
nl2br — 将字符串中的换行符“\n”替换成“<br/>”
number_format — 按照参数对数字进行格式化的输出
ord — 将一个ASCII码转换为一个字符
parse_str — 把一定格式的字符串转变为变量和值
print — 用以输出一个单独的值
printf — 按照要求对数据进行显示
quoted_printable_decode — 将一个字符串加密为一个8位的二进制字符串
quotemeta — 对若干个特定字符进行转义
rtrim — 去除字符串右侧的空白或者指定的字符
setlocale — 设置关于数字,日期等等的本地格式
sha1_file — 将一个文件进行SHA1算法加密
sha1 — 将一个字符串进行SHA1算法加密
similar_text — 比较两个字符串,返回系统认为的相似字符个数
soundex — 判断一个字符串的发音规则
sprintf — 按照要求对数据进行返回,但是不输出
sscanf — 可以对字符串进行格式化
str_ireplace — 像str_replace()函数一样匹配和替换字符串,但是不区分大小写
str_pad — 对字符串进行两侧的补白
str_repeat — 对字符串进行重复组合
str_replace — 匹配和替换字符串
str_rot13 — 将字符串进行ROT13加密处理
str_shuffle — 对一个字符串里面的字符进行随机排序
str_split — 将一个字符串按照字符间距分割为一个数组
str_word_count — 获取字符串里面的英文单词信息
strcasecmp — 对字符串进行大小比较,不区分大小写
strchr — 通过比较返回一个字符串的部分strstr()函数的别名
strcmp — 对字符串进行大小比较
strcoll – 根据本地设置对字符串进行大小比较
strcspn — 返回字符连续非匹配长度的值
strip_tags — 去除一个字符串里面的HTML和PHP代码
stripcslashes — 反转义addcslashes()函数转义处理过的字符串
stripos — 查找并返回首个匹配项的位置,匹配不区分大小写
stripslashes — 反转义addslashes()函数转义处理过的字符串
stristr — 通过比较返回一个字符串的部分,比较时不区分大小写
strlen — 获取一个字符串的编码长度
strnatcasecmp — 使用自然排序法对字符串进行大小比较,不区分大小写
strnatcmp — 使用自然排序法对字符串进行大小比较
strncasecmp — 对字符串的前N个字符进行大小比较,不区分大小写
strncmp — 对字符串的前N个字符进行大小比较
strpbrk — 通过比较返回一个字符串的部分
strpos — 查找并返回首个匹配项的位置
strrchr — 通过从后往前比较返回一个字符串的部分
strrev — 将字符串里面的所有字母反向排列
strripos — 从后往前查找并返回首个匹配项的位置,匹配不区分大小写
strrpos – 从后往前查找并返回首个匹配项的位置
strspn — 匹配并返回字符连续出现长度的值
strstr — 通过比较返回一个字符串的部分
strtok — 用指定的若干个字符来分割字符串
strtolower — 将字符串转变为小写
strtoupper –将字符串转变为大写
strtr — 对字符串比较替换
substr_compare — 对字符串进行截取后的比较
substr_count — 计算字符串中某字符段的出现次数
substr_replace — 对字符串中的部分字符进行替换
substr — 对字符串进行截取
trim — 去除字符串两边的空白或者指定的字符
ucfirst — 将所给字符串的第一个字母转换为大写
ucwords — 将所给字符串的每一个英文单词的第一个字母变成大写
vfprintf — 按照要求对数据进行返回,并直接写入文档流
vprintf — 按照要求对数据进行显示
vsprintf — 按照要求对数据进行返回,但是不输出
wordwrap — 按照一定的字符长度分割字符串
- PHP文件引用
PHP文件引用是指将另一个脚本的全部内容以及功能包含到当前脚本中进行使用,可以减少代码的重用。与C语言中的include使用大致相似。
引用文件语句:
include语句
require语句
include_once语句
require_once语句
- include语句
- 使用include语句引用外部文件时,只有代码执行到include语句时才会将外部文件引用并读取代码。
- 使用:include(引用文件名称)
- require语句
- 一般要放在文件起始位置,常用于引用需要使用的公共函数文件和公共类文件。
- include语句与require语句比较:
- 在调用问件时,如果未找到,require语句会输出错误信息,并且终止脚本处理。include语句会输出警告,但不会终止脚本的处理。
- include_once语句 与 require_once语句
- 这两个与上面两个相似,只不过在执行导入文件前,他们会检测该文件是否在其他地方被引用过,如果有,则不再引用,并且程序只能引用一次。
- 细节
最后总结几个细小注意点:
1、PHP语言的扩展名为 .php
2、PHP程序中可以包含 html,JavaScript代码
3、脚本范围在 <?php 这个范围内 ?>
4、PHP注释有://,#,/* ... */
5、在编写PHP代码时,每个语句结束时,都不要忘记使用英文分号(;),即为指令分隔符
PHP与WEB交互
在上面第二节,用了一张图,讲解了WEB基本工作流程,现在,我们实际练习列子来加深对这方面的理解。
在这之前,我们先回忆一些HTTP请求,常用到 GET 与 POST 这两个请求,我们也实际操作一个例子来了解PHP是如何接收这两个请求的数据,并处理的。
PHP是根据接收通过HTTP协议请求来的数据做处理的,在PHP中也有写好的预定义变量来处理响应的请求:
$_GET:获取通过GET方式提交的数据
$_POST:获取通过POST方式提交的数据
$_COOKIE:获取Cookie数据,这些数据多数是由setcookie()函数设置的值
$_SESSION:获取包含与所有会话变量有关的信息
$_FILES:处理文件上传
下面通过几个小例子来了解一下。
1、GET方式表单提交并接收示例
既然是GET方式提交表单,那么我们先用HTML写一个简单的表单页面:
<html>
<head>
<meta charset="utf-8" />
<title>GET请求例子</title>
</head>
<body>
<form method="GET" action="get.php">
名字:<input type="text" name="name"><br>
年龄:<input type="text" name="age"><br>
<input type="submit">
</form>
</body>
</html>
将其保存为.html
文件。这是一个很简单便于理解的form表单提交数据的例子,method
是提交方式,我们使用 GET
方式提交,所以设置为 GET
, action
是指用哪个PHP脚本处理我们表单提交的数据,在这个例子中,我将其设为 get.php
。再下面是 input
的设置,将其设为 text
文字域,分别将名字和年龄设置的 name
设置为了 name
和 age
,这两个是让 $_GET
明确接收哪个数据,具体如下。
下面看看 get.php
是如何处理表单数据的:
<?php
$name = $_GET["name"];
$age = $_GET["age"];
echo $_GET["name"]."<br>";
echo $_GET["age"]."<br>";
echo "恭喜".$name."大帅哥/大美女"."今年".$age."岁了";
?>
我们看到,我们使用了$_GET
来接收数据, $_GET["age"]
指的是接收年龄这个文字域的数据,这个 age
就是html文件中年龄文字域中 name 设置的属性,即name="age"
。
我们看看运行结果:
2、POST方式表单提交并接收示例
大家不妨将上面代码改成POST请求方式并接受,只需简单修改一些地方即可。
然后运行观察结果,大家可以看看两个URL处有什么不同。
对于GET或是POST,我给出的是个简单的例子,便于理解。但是在实际程序中并没有那么简单,比如说你提交的数据是否为空,或者与数据库交互时是否有敏感字符。当然,PHP中也有相应的函数可以处理这些数据,这些数据传过来都是字符串,我们也可以用字符串一些函数来处理等等。
更多操作,还是那句话,自己多找例子,多学习,多敲打代码。
3、实现文件上传的示例
实现文件上传,也是一个比较重要的知识点,他可以帮助我们理解后期文件上传漏洞。
实现文件上传的预定义变量是 $_FILES 。
在PHP中的 php.ini 文件中有些参数可以对上传文件进行控制:
在 php.ini 中定位到File Uploads处:
file_uploads:如果该值设置为On,代表服务器支持文件上传,Off为不支持,默认为On。
upload_tmp_dir:可以设置上传文件的临时目录,上传后,先放在临时目录中,多数使用系统默认目录。
upload_max_filesize:服务器允许上传文件最大的值,MB为单位。默认为2MB。
php.ini文件修改后,需要重启服务器。
上面是对服务器中一些参数的了解,
下面是 $_FILES 预定义变量中参数的含义:
$_FILES["filename"]["name"]:上传文件的名字
$_FILES["filename"]["size"]:上传文件的大小,单位为字节
$_FILES["filename"]["type"]:上传文件的MIME类型
$_FILES["filename"]["tmp_name"]:上传文件临时目录的
$_FILES["filename"]["error"]:上传文件的结果,如果返回0,则说明文件上传成功
现在,我们编写一个实际例子,来加深理解。
首先,编写html页面:
<html>
<head>
<meta charset="utf-8" />
<title>文件上传例子</title>
</head>
<body>
<form action="uploadfile.php" method="POST" enctype="multipart/formdata">
上传文件:<br>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="提交文件">
</form>
</body>
</html
在这,我们要注意的是,form表单中的 enctype 属性,它规定了form表单数据在发送到服务器时候的编码方式, multipart/form-data ,是指定传输数据为二进制数据,例如图片、mp3、文件。然后是下面上传文件域的设置,input下的 type 属性设置为 file 即代表上传文件域。
然后是 uploadfile.php 代码的编写:
<?php
if ($_FILES["file"]["error"] > 0)
{
echo "错误: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "文件是: " . $_FILES["file"]["name"] . "<br>";
echo "MIME类型是: " . $_FILES["file"]["type"] . "<br>";
echo "大小是: " . $_FILES["file"]["size"] . " <br>";
echo "存储在: " . $_FILES["file"]["tmp_name"];
}
?>
在这段代码中用了简单的条件判断,里面的参数也都在上面讲到了,如果成功上传,就会显示上传文件的一些信息。
运行结果:
PHP与MySQL交互
现在,我们继续学习PHP与MySql交互。
我们常将数据存储在数据库中,在访问网页时通过PHP响应函数调用数据库中存储的数据,然后返回到前端界面。这个流程在最上面的那张图中也将到了。
但PHP具体如何操作MySQL呢?
PHP要想操作MySQL需要在 php.ini 中设置一些参数,打开对应数据库扩展程序:
具体介绍
然后打开对应扩展:
我们使用 mysqli
扩展,它与 mysql 扩展用法一样,基本相似,但是 mysqli
的函数名称是以 mysqli
开始的。
他们两者当然也有区别,但对初学来说影响不大。
还有一个是 PDO ,它可以应用在12中不同的数据库中,而 mysqli 只能应用于mysql 中。
mysqli有一系列函数集可以让我们操作mysql数据库。
PHP与MySQL交互基本流程
PHP与MySQL交互有这五个步骤对应的函数:
1、连接MySQL数据库
mysqli_connect("MySQL服务器地址","用户名","密码","连接数据库名称(可选)","MySQL服务器使用的端口(默认3306)")
2、选择MySQL数据库
mysqli_select_db("连接表示(必选参数)","数据库名称(必选参数)")当然在连接数据库时,也可以同时选择数据库名称
3、执行SQL语句
mysqli_query("连接标识(必选参数)","查询语句(必选参数)")
4、获取查询结果
mysqli_fetch_array():将结果集返回数组中。
mysqli_fetch_object():从结果集中获取一行作为对象
mysqli_fetch_row():从结果集中获取一行作为枚举数组
mysqli_fetch_assoc():从结果集中获取一行作为关联数组
mysqli_num_rows():获取查询结果集中的记录数
5、释放内存,关闭连接
mysqli_free_result(): 释放结果内存。
mysqli_close():关闭先前打开的数据库连接。
PHP 5 MySQLi 函数大全以及具体用法:
https://www.runoob.com/php/php-ref-mysqli.html
连接数据库并选择数据库例子:
<?php
$host = "127.0.0.1";
$user = "root";
$pwd = "123456 ";
$connID = mysqli_connect($host,$user,$pwd);
$select_db = mysqli_select_db($connID,"information_schema");
if($connID){
echo "<script type='text/javascript'>alert('连接成功!')
</script>";
}
else{
echo "<script type='text/javascript'>alert('连接失败!')
</script>";
}
?>
大家运行一下,修改不同参数,来观察一下连接结果。
获取结果例子:
https://www.runoob.com/php/php-mysql-select.html
现在,大家对PHP操作MySQL有了基本的了解,毕竟他获取结果方式有些多,大家可以根据我给的例子多操作一下,多了解一下。例子有很多,多练习,直到你真正的了解了这个知识点,熟练应用这个知识点为止。
总结
本篇PHP基础教程,讲了常见基础知识点,非常实用。但是,一门语言不是花个几分钟看一篇文章就能明白的,要多动手实践。本篇基础教程,给出了几个实例,要自己动手操作。另外,本篇教程,省略了一些其他的细枝末节,毕竟一门语言从0到1,需要自己花大量时间打磨。
但这篇文章,从大的方面可以对这个语言有个极大的了解,从小的方面又可以学习一些基础知识点。
但还缺乏你自己的练习,对Web安全和CTF来说,一定要先掌握一门语言,PHP好学易懂,然后要学python,开发属于自己的小工具。
在了解,学习过一门语言之后,对于其他语言学习也是有极大帮助的。