在正式学习渗透测试前还是补补坑吧
一些了解
维基百科对PHP的定义: > PHP: Hypertext Preprocessor (or simply PHP) is a server-side scripting language designed for Web development, and also used as a general-purpose programming language.`
即:PHP(Hypertext Preprocessor),它的名字意为:超文本预处理器。它的起源初期主要用于统计自己网站的访问者,后来用c语言进行了重新编写,拥有了自己的访问文件和数据库功能。PHP是一种生成动态网页的工具。与其他的制作技术相比,它的优点是学习简单,易于掌握,数据库连接方便,兼容性和扩展性强。可以进行面向对象编程。它是嵌入HTML文件的一种脚本语言,也是当前因特网中最为流行的脚本语言,它只需要很少的编程知识和技能,就能用PHP建立一个真正交互的Web站点。PHP可以结合HTML语言共同使用,与HTML之间具有很好的兼容性,使用者可以直接在脚本代码中加入HTML标签,或者在HTML标签中加入脚本代码,从而更好地实现页面控制,并提供更加丰富的功能。
(以上来自ctrl+v)
我自己的认识的话。首先从它本身来说,他是基于C语言开发的,所以对有C语言基础的人也比较友好,其次它具有面向对象编程的特点------但不能说它是一门面向对象的语言,因为它没有封装等的类实现。其次从功能来说,我自己了解的程度就是PHP是实现让用户和后台交互的一门语言,包括访问指定页面、获取查询的数据。除此之外PHP也可用于构建网站框架等等。
基础语法
- 标志:PHP脚本以
<?php
开始,?>
结束,如:
1 |
|
文件默认扩展名为.php
。 2.
使用:PHP文件通常包含HTML标签和一些PHP脚本代码。如: 1
2
3
4
5
6
7
8
9
<html>
<body>
<h1>This is a test</h1>//注释文本
,多行注释\*注释文本*\
变量
PHP变量是具有面向对象编程特点的,即我们可以将变量理解为一模一样的“容器”,只不过他们里面装的东西类型不一样,所以类型区别而已。
1.
定义变量:所有变量的定义都以$
开头,其后跟变量的名称。关于变量名称,必须以下划线或字母开头。且只能包括字母数字及下划线,字母的话是区别大小写的,即:&a
和&A
是两个变量。注意不能包含空格。
2. 创建变量:注意这里我们的变量是不用声明类型的。 1
2
3$a = "Hi";
$b = 5;
$c = 5.5;
那么弱类型有什么好处呢?直觉就是简单,直接复制,是什么类型会自动处理,完全的逻辑设计。所以使用弱类型会减少我们的开发时间,使代码更简洁。当然,也有坏处,类型不确定导致的不可预料的混乱,不像C语言等面向过程的强类语言,1就是1,绝对不会是"1"。
变量作用域
PHP有四种不同的作用域:local、global、stastic、parameter。 1.
局部和全局作用域:与C语言一样,变量加上global关键词后脚本的任何一个地方都可以访问这个变量,local关键词默认是不用写的,比如C语言,定义在函数里的变量,main()函数是不能访问的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$x=5;
$y=10;
function myTest()
{
global $x,$y; //全局变量,函数内可访问
$y=$x+$y;
}
myTest();
echo $y; //输出应该为15而不是10
如果我们这么写:
1 |
|
结果就会变为这样:
x正常输出、y变量提示未定义。即x为全局变量、y为局部变量。这就是global
关键词的作用:让函数内可以读取函数外的变量值。
2. Static作用域
比如上面的function
mytest(),如果我在里面再定义一个局部变量,这个函数执行完以后局部变量是会消失的,同C语言一样的道理。
那么怎么做到不让他消失呢,这就是Static作用域的作用。与上面一样,加个Static
关键词就行。
1 |
|
结果:
我们调用了三次函数,可以看出,\(a的值没有变,也就是说三次调用\)a一直是创建、删除、创建、删除...的状态,所以值没有变,但是$b是静态的所以保留了上次的结果没有变。
注意:虽然是静态的、但不意味他是全局的,外部是不能访问的。
3. parameter(参数)作用域
说白了就是可以调用传过来的参数。
1 |
|
输出自然也就是5了。
变量类型
PHP一共支持八种数据类型,包括4种标量类型,即boolean(布尔型),integer(整形),float/double(浮点型)和string(字符串类型);两种复合类型,即array(数组),和object(对象);两种特殊类型,resource(资源)与bull。 4种标量类型这里不做赘述,与C语言相同。
- array数组类型
数组是一组数据的集合,它把一系列数据组织起来,形成一个可操作的整体。数组中可以包括很多数据,如标量数据、数组、对象、资源以及php中支持的其他语法结构 。数组中的每个数据称为一个元素,元素包括索引(键名)和值两个部分。元素的索引可由数字或字符串组成,元素的值可以是多种数据类型。 PHP中使用array()函数来构建一个数组。PHP的数组共有三种:
1. 数值数组:
数值数组即带有数字ID键的数组。所谓ID
其实就是数组的下标。有两种方式创建数值数组:
1 |
|
结果:
2.
关联数组:关联数组是使用分配给数组的指定的键的数组。这个倒是感觉跟python的字典有类似的地方。仍然是两种定义方式。如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//关联型数组
//第一种
$c = array("a"=>1,"b"=>True,"c"=>1.00001,"d"=>"string");
var_dump($c);
echo "<br>";
//第二种
$d["a"]=1;
$d["b"]=True;
$d["c"]=1.00001;
$d["d"]="string";
var_dump($d);
3. 多维数组:
与C语言中的比如a[10][10]
等的二维数组类似,PHP中数组的内中不只上面的内容,也可是数组,即数组套数组,以此可以构造二维、三维数组。如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27//我们采用自动分配ID的方式
$sites = array
(
"php"=>array //即$sites["php"]
(
"php中文网", //即$sites["php"][0]
"http://www.php.cn"
),
"google"=>array
(
"Google 搜索",
"http://www.google.com"
),
"taobao"=>array
(
"淘宝",
"http://www.taobao.com"
)
);
print("<pre>"); // 格式化输出数组
print_r($sites);
print("</pre>");
echo "<br>";
//我们可以查看里面的内容
echo $sites["taobao"][0];
- object对象类型
这个就有面向对象的概念了,与python这点事相同的。我们使用class来声明一个类队想,这里的对象可以包含一些方法和属性。如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Car
{
var $color;
function Car($color) {
$this->color = $color;
}
function what_color() {
return $this->color;
}
}
function print_vars($obj) {
foreach (get_object_vars($obj) as $prop => $val) { //get_object_vars:返回由对象属性组成的关联数组
echo " $prop = $val
";
}
}
//实例化一个类对象
$herbie = new Car("blue");
//返回由对象属性组成的关联数组
print_vars($herbie);
echo "<br>";
echo $herbie->what_color(); //调用方法时使用`->`即可
首先我们定义了一个类,叫Car,它有一个属性color
,其次他还有两个方法,方法car($color)
会将实例化的对象的color属性赋值为$color
的值,方法what_color()
则返回示例的color属性。
结果:
关于PHP对象我会专门做一次总结,这里大概介绍。
- 两种特殊类型
1. 资源类型(resources):
资源数据类型是PHP4引进的。资源是一种特殊的变量类型,保存了到外部资源的一个引用:如打开文件、数据库连接、图形画布区域等。资源是通过专门的函数来建立和使用的。如:
1
2
3
4
5
$fp = fopen("flag.txt", "r");
var_dump($fp);
fclose($fp);
数字3
:表示资源ID为3。stream
:资源类型名称。
2. 空值类型(NULL):
NULL值表示变量没有值。数据类型值为NULL。由NULL值可以判断一个变量是否为空,也可以通过设置变量值为NULL
来清空变量数据。如: 1
2
3
4
5
$x="Hello world!";
$x=null;
var_dump($x);
补充:可变变量
可变变量的意思就是他的变量名时可以动态设置的。如: 1
2
3
4
5$hi = "hello";
$$hi = "world"; //两个$$即可创造一个可变变量的变量
echo $hello; //输出world
echo $($hi); //输出world
常量
上面我们介绍了变量,这里再介绍一下常量。 常量和变量都是PHP的储存单元,但名称、作用域和声明方式都有所不同,下面是两者的区别:
1. 常量前面没有$
符号。 2.
常量只能用define()来定义,而非赋值语句。 3.
常量可以不受作用域的限制,脚本任何地方都还可以定义和使用 4.
常量从定义之后就不能够被重新定义或取消定义,直到脚本结束。 5.
常量的值只能是上面的四种标量类型,即:布尔型、整数型、浮点型、字符型。
定义格式如下:
boolean define(string name,mixed value[,bool case_insensitive]);
第一个参数为常量名称,第二个为值或表达式,第三个可选,TRUE时为不区分大小写,False区分大小写,默认False。
1
2define("CONSTANT", 100);
ehco a; //输出100
1.
预定义常量为一些系统常量,如PHP_OS
常量值为执行PHP解析的操作系统名称,如:UNIX或WINNT等。PHP_VERSION
为当前PHP服务器版本,DIRECTORY_SEPARATOR
是根据操作系统决定的目录分隔符,PATH_SEPARATOR
为环境变量的目录分隔符。等等。如:
2. PHP中共有5个魔术常量:__FILE__
,
__LINE__
, __FUNCTION__
,__CLASS__
,
__METHOD__
。它们分别意为:当前文件名、当前行数、当前的函数名、当前的类名、当前的对象的方法名。
这里做一个演示: 1
2
3
4
5
6
7
echo "当前操作系统为:" . PHP_OS . "<br>";
echo "当前PHP版本为:" . PHP_VERSION . "<br>";
echo "当前文件名为:" . __FILE__ . "<br>";
echo "当前行号为:" . __LINE__ . "<br>";
echo "该系统环境分隔符为" . PATH_SEPARATOR . "<br>";
echo "该系统目录分隔符为" . DIRECTORY_SEPARATOR;