Web 架构中后端(服务器端)脚本语言。为实现网站动态应用提供支持,通常与Apache(Web 容器)和MySQL(数据库)配合,构建一个免费开源的Web 应用环境(LAMP/WAMP)。
本课程中所使用的环境是phpStudy 。
phpinfo()
的内容,说明php 环境'正常';如果是一个在线的网站能够看到该页面,说明存在敏感信息泄露 漏洞,这个漏洞需要体现在后面的渗透测试报告中;再有,如果通过文件上传,能够看到该页面,说明存在文件上传 漏洞,并且能够"完美利用"。
这之间就表示进入PHP模式,在开始和结束标记之外的内容都会被PHP解析器忽略,之外的内容会被作为字符输出到浏览器中。?>
可以不要,在一些情况下省略掉更好!分号,;
。
?>
就隐含一个分号,所以PHP 代码最后一行可以不用加分号!
空白符包括:
这些在PHP中都是无关紧要的(注意都是英文输入法下输入的),可以将一个语句展开成任意行,或者紧缩在一行,空格与空行的合理运用可以增强代码的清晰性与可读性,如果运用不合理反而会对阅读产生负担!
不能是用空白符打断PHP 的关键字(函数名,语句名,变量名,类名,方法名等等)。
现实生活中在家里用柜子来存放衣服、包、书籍或者其他的东西。
中药房。
变量包含四个部分内容:
变量是用于临时存储值的容器。
变量在任何编程语言中的都是核心地位。
另外,PHP 脚本语言是一种弱类型语言,和其他语言不同的是变量(常量)的数据类型由程序的上下文决定(给一个变量赋予什么样的值,就是什么数据类型)。
PHP的特性之一就是它不要求在使用变量之前声明变量,当第一次给一个变量赋值时,才创建了这个变量,变量用于存储值比如数字、文本字符串或者数组。一旦设置了某个变量,就可以在脚本中重复地使用它。
PHP 中变量必须使用一个美元符号$
后面跟着变量名来表示,使用赋值操作符=
给一个变量赋值。
unset()
函数释放指定的变量。
";
unset($name); //释放$name
echo $name; //Notice: Undefined variable: name
?>
在第一次使用变量时,就进行赋值,这个过程叫"初始化"。在后期使用变量的时候,可以随时修改变量的值。
直接用一个等于号=
,就可以完成变量的赋值。
";
$name;
echo $name; //Notice: Undefined variable: name
echo "
";
$name = "AJEST";
echo $name; //AJEST
?>
一个变量的名字 可以动态的设置和使用。
$$
是php 的特性,也是产生php 中变量覆盖漏洞 的原因。
";
echo $$name;
echo "
";
echo $AJEST; //dnsec.com.cn,定义过$AJEST,并且进行了初始化。
?>
引用赋值可以简单的理解为给变量起了个别名。
";
$b = $a;
$b +=1;
echo $b;echo "|";echo $a;
echo "
";
$c = &$a; //变量的引用赋值,
//相当于给变量名起了一个别名
$c +=1;
echo $c;echo "|";echo $a;
?>
变量类型是指保存在该变量中的数据的数据类型,在计算机编程语言世界中每个数据都有它的类型。
具有相同类型的数据才能被彼此相互操作。
在强类型的语言中例如C语言,变量要先指定类型(变量的声明),然后才可以存储对应指定的数据,就好比现实生活中在制作一个柜子之前,就要决定好这个柜子是什么类型的柜子,是书柜那么以后就只能用来存书,是衣柜以后就只能用来存衣服。
但是PHP 是一种弱类型的语言,和其他语言不同的是,变量或者常量的数据类型由程序的上下文决定,不需要事先声明类型。一个柜子,要是往里面存书籍那么他就是书柜;要是往里面存放衣服,那么它就是衣柜,根本不需要事先说明这个是书柜还是衣柜,一切根据实际需要使用即可!
可以将数据的变量类型输出,使用的函数var_dump()
。
boolean
这个是最简单的类型,布尔型表达了true
或false
,即真或假。
";
var_dump($b);
?>
进行if
判断的时候,会有类型转换(PHP 定义好了的),其他类型的之转换成布尔类型的值。以下值被认为是false
,其他的值都是被认为是true
。
bool(false)
int(0)
float(0)
string(0) ""
或者 string(1) "0"
array(0) { }
NULL
";
if($a){
echo 'True';
}else{
echo 'False';
}
?>
存储整数
浮点型,指包含小数的数。
字符串是一系列的字符。
字符串可以使用单引号、双引号、定界符三种方法来定义!
'
括起来。
"
括起来{}
将变量名括起来。
经常会用PHP 语言写一些HTML 代码。
My name is {$name}
<<<
之后提供一个标示符开始,然后是字符串的内容最后是同样的标示符表示结束,结束标示符之后必须接;
不可以用其他的任何字符(包括分号之后)。$
同样会识别成变量,变量名要用{}
括起来。{$name}
HTML;
echo $str;
?>
常量是一个简单值的标示符,如其名称所暗示的。在PHP 脚本执行期间一个常量一旦被定义,就不能被改变或者取消定义,常量的作用于是全局,常量包含bool,int,float,string类型的数据!
define()
常量的命名与变量类似,也遵循PHP标识符的名称规则,按照惯例常量标识符总是大写的
$
。define()
函数定义,不能通过赋值语句。bool
,int
,float
,string
类型。预先定义好的常量,就是程序中可以直接使用的常量,一般来完成一些特殊功能!
常量名常量值__FILE__
当前的文件名,完整的路径__LINE__
当前行号__FUNCTION__
当前的函数名__CLASS__
当前的类名__METHOD__
当前对象的方法名PHP_OSUNIX或WINNT等PHP_VERSION当前PHP 服务器的版本DIRECTORY_SEPARATOR或/ 根据操作系统决定目录的分隔符
运算符对一个或者多个操作数(变量或者数值)执行某种运算的符号,也称操作符!
例子名称结果-$a
取反$a
的负值$a + $b
加法$a
和 $b
的和$a - $b
减法$a
和 $b
的差$a * $b
乘法$a
和 $b
的积$a / $b
除法$a
除以 $b
的商$a % $b
取模$a 除以 $b
的余数++$a
前加$a
的值加一,然后返回 $a$a++
后加返回 $a
,然后将 $a
的值加一--$a
前减$a
的值减一, 然后返回 $a$a--
后减返回 $a
,然后将 $a
的值减一
对于JS 来说,字符串拼接+
,另外.
访问对象中的属性或者方法。
但是PHP 中使用.
进行字符串拼接。PHP 中.
也叫连接运算符。
二元赋值运算符例子解释=+=-=*=/+%=.=
对操作数(按照比较运算符的要求,规则)进行比较后,得到返回值(boolean)。
如果比较出的结果满足比较运算符的要求那么结果就是true
(真,成立,满足),否则就是false
(假,不成立,不满足)
例子说明备注$a == $b
等于$a === $b
全等值相等并且数据类型相同$a != $b
不等$a <> $b
不等$a !== $b
不全等$a < $b
小于$a > $b
大于$a <= $b
小于等于$a >= $b
大于等于
$b; //bool(true)
$c = $a == $b; //bool(false)
//var_dump($c);
echo $c;
?>
echo
输出布尔类型值的时候echo true;
,它在页面中会输出1echo false;
,它会在页面中什么都不输出var_dump()
来输出更明了的结果!逻辑运算符例子解释运算符法则and$a and $b
逻辑"与"运算&&$a && $bor$a or $b
逻辑"或"运算||$a || $bxor$a xor $b
逻辑"异或"运算相同为假,不同为真!!$a
逻辑"非"运算
?:
$b)?$a:$b;
var_dump($max); //int(20)
?>
".`$cmd`; //调用系统命令
?>
=
,右边的值给左边的值。-
,左边的值减去右边的值。结合方向运算符附加信息无clone newclone
和 new
左[array()
右**
算术运算符右++ -- ~ (int) (float) (string) (array) (object) (bool) @
类型和递增/递减无instanceof
类型右!
逻辑运算符左*/%
算术运算符左+-.
算术运算符和字符串运算符左<<>>
位运算符无<<=>>=
比较运算符无==!====!==<><=>
比较运算符左&
位运算符和引用左^
位运算符左|
位运算符左&&
逻辑运算符左||
逻辑运算符左??
比较运算符左? :
ternary右=+=-=*=**=/=.=%=&=|=^=<<=>>=
赋值运算符左and
逻辑运算符左xor
逻辑运算符左or
逻辑运算符