PHP快速入门
写在前面的废话
第一次写入门教程,写的不好被骂不重要,重要的是把想要入门的同学带到坑里就十分愧疚了,在此希望看到此文的朋友可以帮忙指出问题,我会及时更正。
本篇文章以文档加个人少量见解写出,目的是帮助新手快速上手掌握具备开发的基础知识。内容主要关于PHP基础语法,常用函数操作,一些概念的理解。
文章的整个思路是以如何学习使用一件工具创造展开,包括PHP作为工具第一步是去找到它(安装),认识它(了解),知道怎么简单使用(熟悉语法,函数);第二步是作为一个组件配合其他组件一起使用(了解l/wamp);第三步,这是对工具已经很熟练了,自然是拿着工具搞事情(作为工具:开发,创造),把心中所想的东西创造出来;第四步,想要创建一个更加宏伟的工程,就需要和其他工具一同创造(作为组件:提供接口)。
这里只写了第一和第二步,因为我实在太懒了。如果大家能从这里获取到一些知识,我会继续更新下去,把作为工具:开发,作为组件:提供接口写下去。
由于长期以来太懒,知识体系复杂,相互之间又联系紧密,每一块知识都包括着许多块的知识,我又是个喜欢刨根问底的人,回溯根源又过于久远,想要精通一些知识很难。因此我想改变这一困境,构造一个快速学习,如环状的知识体系的环境 。若是你有什么快速学习的办法,或者快速构建知识体系,或者其他什么有趣的想法,又乐于分享的话,欢迎找我尬聊(blcat: x.y@tom.com)。
安装
下载链接:https://windows.php.net/download/
若缺少VCRUNTIME140.dll: https://www.cnblogs.com/danielchan-php/p/5071554.html
若要随时打开php交互,添加环境变量:把下载php压缩包解压目录添加环境变量中
如果证明成功添加PHP环境变量
若为Unix或者Mac平台可使用相应的包管理软件安装(如:apt,yum, brew..)
作为工具(如何使:基础语法和常用函数)
操作变量(语法,变量类型,变量相关操作,运算符)
什么是变量?我们知道数据是存储在电脑的空间中,空间的名字就是变量名,而空间中存储的数据就是变量,因为这个空间里的数据是可以改变的。
语法(命名,语句格式)
第一次运行:使用phpstorm(其他IDE也行)创建1.php文件写入
<?php echo "I am here ! ";
,运行后输出I am here !
如下图关于
<?php echo "I am here !";
语法解释:<?php
为起始标签用于说明之后写的是php代码,对应的有闭合标签?>
如果文件内容是纯 PHP 代码,最好在文件末尾删除 PHP 结束标记。这可以避免在 PHP 结束标记之后万一意外加入了空格或者换行符,会导致 PHP 开始输出这些空白,而脚本中此时并无输出的意图。所以上面代码无闭合标签。
/** Created by PhpStorm **/
这段是注释说明,说明了由phpstorm 创建的文件。/** xxx **/
用于多行注释//
用于单行注释echo
为php输出函数,相似的输出函数还有print()
var_dump()
输出123
echo 123;
//123print(123);
//123var_dump(123);
//int(123) 输出值和变量;
作为每个php语句结束符变量类型
定义变量的非常简单,在变量名前加美元符号
$
。变量名命名规范:普通变量一般小写,常量变量大写,函数名小驼峰(testFunction),类名和文件名一般大驼峰命名( TestFunction ),不可以数字或特殊符号开头上面我们输入的
"I am here !"
属于字符串string型变量,123
属于int整型变量,除此之外还有bool型、float浮点型、array数组型、Object对象型、Resource资源型、Null型、Callable/Callback回调类型string字符串
定义一个字符串最简单就是用单引号或者双引号包裹起来,
'php string'
"string php "
,要表达引号及其他特殊符号如换行,需在双引号中使用转移符号\
比如
"you may said \"PHP is the best language!\""
除此之外,还有两种不常用字符串格式,Heredoc和nowdoc(自5.3.0起)
heredoc (用作写入大段文本且能解析其中的变量及特殊字符)
以<<<为该运算符并在之后要提供一个标识符,然后换行。接下来是字符串 string 本身,最后要用前面定义的标识符作为结束标志。这里以test作为标识符示例:
1
2
3
4
5
6
7
8
$str = <<< test
Example of string
using test as sign
and heredoc syntax .
test;
//在结束定界符(可能其后有个分号)之后也必须紧跟一个换行。若没有则报错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
29/* 含有变量和类的更复杂示例 */
class foo
{
var $foo;
var $bar;
function foo()
{
$this->foo = 'Foo';
$this->bar = array('Bar1', 'Bar2', 'Bar3');
}
}
$foo = new foo();
$name = 'MyName';
echo <<<EOT
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should print a capital 'A': \x41
EOT;
/**
输出My name is "MyName". I am printing some Foo.
Now, I am printing some Bar2.
This should print a capital 'A': A
**/
//$foo->foo foo对象的foo变量的值 "Foo"
//$foo->bar[1] foo对象的bar数组的第二个值 "Bar2"Nowdoc(用作输出大段文本而无需解析特殊符号)
与Heredoc不同的是需要将标识符用单引号包裹,其他均相同。
1
2
3
4
5
6
7
8
$str = <<<'test'
Example of string
spanning multiple lines
using nowdoc syntax.
test;
//nowdoc 也需要在结束出换行int整型
int包括所有整数(含0,负整数)
整型值可以使用十进制,十六进制,八进制或二进制表示,前面可以加上可选的符号(- 或者 +)。
1
2
3
4
5
6
7
8
$a = 1234;
$a = -123;
$a = 022; // 八进制(等于十进制18)
$a = 0x1A; // 十六进制(26)
$a = 0b111; // 二进制(7)
echo $a;int型数字是有范围的,32为操作系统打约20亿(有符号),64为9E18。
定义或者运算超出范围将被自动转为float浮点型。
float浮点型
浮点型(也叫浮点数 float,双精度数 double 或实数 real)可以用以下任一语法定义:
1
2
3
4
5
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;浮点数结果精度到最后一位是不可信的,因为取整而导致的相对误差为1.11e-16,且以10进制可以精确表示的0.1和0.7, 都无法被内部所使用的二进制精确表示。如使用floor取整
floor((0.1+0.7)*10)
后的结果为7
,而非8。所以在比较浮点数时应限定一个精度值。
array数组型
主要用作将一组有联系的变量放在一起,也可以为空。
定义一个数组
1
2
3
4
5
6
7
8
$arr = array(); //定义空数组
$a = []; //也可以这样定义
$b = ["php","张三",123]; //可以是任何类型
$c = ["hahha", ["array in array", “array2”], 1233]; //当然在数组里可以放数组
$d = ["key1"=> "value2", 2=>"ddd", 666=>[]]; // c义关联数组(可以自定义命名键key)
$bb = [0=>"php", 1=>"张三", 2=>123]; //和数组b一样,b属于省略键名1
2
3
4
5$b = ["php","张三",123];
$b[] = "233333"; //追加23333
$d = ["key1"=> "value2", 2=>"ddd", 666=>[]];
$d["key1"] = "hello"; // 若追加键名原数组已经有了,追加狗覆盖掉对应的值遍历读取数组
1
2
3
4
5
$d = ["key1"=> "value2", 2=>"ddd", 666=>[]];
foreach($d as $key=>$value){
echo $key+"=>"+$value+"\n"; //输出键值并换行,+表示拼接字符串
}NULL型
特殊的 NULL 值表示一个变量没有值。NULL 类型唯一可能的值就是 NULL。
在下列情况下一个变量被认为是 NULL:
- 被赋值为 NULL。
- 尚未被赋值。
- 被 unset()。
1
2
3
4><?php
>$a = "I am code";
>$a = null;
>var_dump($a); // Nullbool布尔型
最简单的类型,表达真值,只有True 或False(不区分大小写)。
False:
0、FALSE 、0.0、空值、空字符串、空数组、Null、未赋值的变量
Object对象型
要创建一个新的对象 object,使用 new 语句实例化一个类:
1
2
3
4
5
6
7
8
9
10
11
class foo
{
function do_foo()
{
echo "Doing foo.";
}
}
$bar = new foo;
$bar->do_foo();将在作为组件(如何创造:开发)中提及。
Resource资源类型
资源 resource 是一种特殊变量,保存了到外部资源的一个引用。资源是通过专门的函数来建立和使用的。所有这些函数及其相应资源类型见 PHP文档附录。
如打开文件、数据库连接、图形画布区域等的特殊句柄
Callback/Callable回调类型
自 PHP 5.4 起可用 callable 类型指定回调类型 callback。
一些函数如 call_user_func() 或 usort() 可以接受用户自定义的回调函数作为参数
1
2
3
4
5
6
7
8
9
10
function callback_f(){
echo "This is call ..!";
}
function main(callable $func){ //这里就需要传递一个callable类型的函数
call_user_func($func);
}
main("callback_f");变量相关操作
变量类型判断(is_xx()函数)
1
2
3
4
5
6
7
8
9
10
11
12
13
is_int(123) //True
is_array():检查变量是否是数组。
is_double()、is_float()、is_real():检查变量是否是浮点数。
is_long()、is_int()、is_integer():检查变量是否是整数。
is_string():检查变量是否是字符串。
is_bool():检查变量是否是布尔值。
is_object():检查变量是否是一个对象。
is_resource():检查变量是否是一个资源。
is_null():检查变量是否为null。
is_scalar():检查该变量是否是标量,即,一个整数、布尔值、字符串或浮点数。
is_numeric():检查变量是否是任何类型的数字或数字字符串。
is_callable():检查该变量是否是有效的函数名称。不建议使用
gettype()
来测试某种类型,因为其返回的字符串在未来的php版本中可能会改变,此外,由于包含了字符串的比较,它的运行也是较慢的。建议使用is_函数代替。变量类型转化
若当前的变量不是你需要的类型,可强制转化类型
(typename)$var
1
2
3
4
5
6
7
8
9
10
11
12
$a = 12333;
$b = (string)$a;
$c = (array)$a;
var_dump($b,$c);
/**
string(5) "12333"
array(1) {
[0]=>
int(12333)
}
**/变量相关常用函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$var = "This is a string !";
$var_arr = explode(" ", $var); //以空格分割$var为数组
$new_var = implode(",", $var_arr); //以逗号拼接数组值 join同作用
$new = str_replace("string", "newcode", $var); //将$var中的string替换为newcode
$len = strlen($new) //返回$new变量字符串个数
$a = " Before and After ";
$b = trim($a); //去掉首尾空白
$place = strpos($a, "and"); //查找and在字符串中首次出现的位置。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$arr = array("a"=> "香蕉","ha"=>"牛奶", "瓜子壳"=>"皮皮虾");
array_keys($arr); //返回所以键
array_values($arr); //返回所有的值
array_push($arr, "cc"); //将cc字符串推入数组
array_pop($arr); //取出数组最后一个元素
array_shift($arr); //取出开头第一个元素
array_key_exists($key, $arr); //查找是否存在$key这个键,返回bool
count($arr); //返回数组个数
array_unique($arr); //数组去重运算符
PHP 算术运算符
PHP 赋值运算符
在 PHP 中,基本的赋值运算符是 “=”。它意味着左操作数被设置为右侧表达式的值。也就是说,”$x = 5” 的值是 5。
PHP 递增/递减运算符
PHP 比较运算符
比较操作符可以让您比较两个值:
PHP 逻辑运算符
PHP 数组运算符
三元运算符
1
2
3
4
5
6
7
8
9
10(expr1) ? (expr2) : (expr3)
// 可以省略三元运算符中间那部分。表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。
$test = 2;
$number = isset($test) ? $test : "no number";
$number = $test?:"no number";
echo $number;
//还有一种形式 ?? NULL合并运算符
$num = $_GET['num'] ?? "no number";运算符优先级
下表按照优先级从高到低列出了运算符。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。
说明:左 = 从左到右,右 = 从右到左。
操作语句(流程控制)
判断if...else...
1 |
|
1 | if($a>1){ |
循环(while, do..while, for, foreach…..)
1 |
|
1 |
|
1 | //与while不同,for循环把变量,终止条件都写入参数,相对更加简洁 |
1 |
|
选择语句(switch…)
1 |
|
跳出循环(continue)
1 |
|
跳转(goto)
1 |
|
操作函数(语法,函数参数,返回值,内置函数,匿名函数,回调函数,生成器)
在数学里是给定一个x,通过某种规则都有唯一的一个y与之对应,这种规则就是函数。
比如计算不同圆的半径下圆的面积:y = f(x) , f(x) = π*x^2
用php实现就是
1
2
3
4
5
6
7
8
9
const π = 3.14; // 定义静态变量π的值为3.14
function f($r){ // f就是函数名,可以自定义;$r是传入的参数变量,相当于x
$y = π*$r^2; // 进行运算并将运算结果赋值给y变量
return $y; // 返回运算结果
}
echo f(2333); // 调用f函数总的来说php中的函数是对重复逻辑的抽象,可以被重复调用执行
语法
上面的示例函数就是一个标准的函数,有参数$r,有返回值$y。所以定义一个函数很简单:
1
2
3
4
5
6function name(){ // funtion 声明这是个函数;后面为函数名;括号部分可自行决定是否要传参
echo "这里是逻辑代码部分...."; // 逻辑代码实现被包裹咱{}内
// 自行决定是否需要返回值
}
name(); //调用函数需要注意的是在函数内部属于自成空间,所有变量都是局部变量,无法直接调用和修改外部变量
1
2
3
4
5
6
7
8
$var = 1233;
function test(){
$var = 2333;
}
test();
echo $var; // 1233但是我就是想用函数修改呢?
1
2
3
4
5
6
7
8
9
$var = 1233;
funtion test(){
global $var; // 只需要在函数内部使用global关键字声明变量为全局变量
$var = 2333;
}
test();
echo $var; // 2333函数嵌套
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function foo()
{
function bar()
{
echo "I don't exist until foo() is called.\n";
}
}
/* 现在还不能调用bar()函数,因为它还不存在 */
foo();
/* 现在可以调用bar()函数了,因为foo()函数
的执行使得bar()函数变为已定义的函数 */
bar();递归函数
要注意的是,递归函数需要一个终止的条件,避免递归函数/方法调用超过 100-200 层,出现无限递归可能会使堆栈崩溃。
1
2
3
4
5
6
7
8
9
10
11
function recursion($a)
{
if ($a < 20) { //当变量a大于20后就停止调用
echo "$a\n"; //输出变量a的值并换行
recursion($a + 1); //这里在函数内部调用自己,每次+1
}
}
recursion(2); //调用recursion函数,传递a的值为2有实际参数的函数
注意的一点是有值得参数需要放在后面
1
2
3
4
5
6
7
function test($name, $age=19){
echo "$name:$age";
}
test("wzx"); // wzx:19
test("xcv", 233); // xcv:233回调函数
回调函数就是通过一个函数指针调用的函数,常用在一些特定状态/情况/场景触发。把一个函数的地址作为参数传递给另一个函数,当调用那个函数时,会自动调用我们传递的函数。
PHP中已经实现了两个函数:
call_user_func()、
1
2
3
4
5
6
7
8//call_user_func(callback, [$para]) 把第一个参数作为回调函数调用,其余参数为回调函数的参数
function test($para){
echo "This is test function called $para";
}
call_user_func("test", "hah"); // This is test function called hah1
2
3
4
5
6
7
8
9
10
11
12//调用类里面的一个方法
class Foo
{
static function t(){
echo "This is Foo class t function called";
}
}
call_user_func(array("Foo", "t")); // 尝试调用类内的非静态方法会产生一个警告
$foo = new Foo();
call_user_func(array($foo, "t")); // 实例化后可任意调用call_user_func_array()
与call_user_func相比,更方便的传参
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16//call_user_func_array(callback, array) 调用回调函数,并把数组中参数作为回调函数的参数
function foobar($a1, $a2){
echo "got $a1 and $a2 \n";
}
class foo
{
function bar($a1, $a2){
echo "got $a1 and $a2 in Foo !\n";
}
}
call_user_func_array("foobar", array("Tom", "Jim")); //调用函数
$foo = new Foo();
call_user_func_array(array($foo, "bar"), array("Tom", "Jim")); //调用类匿名函数
匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。当然,也有其它应用的情况
1
2
3
4
5
6
// preg_replace_callback — 执行一个正则表达式搜索并且使用一个回调进行替换
echo preg_replace_callback("(-[a-z])", function ($match){ //正则匹配横线字母
return strtoupper($match[0][1]); // 将匹配到的替换为字母大写
}, "hello-world");
// 输出helloWord闭包函数也可以作为变量的值来使用。PHP 会自动把此种表达式转换成内置类 Closure 的对象实例
1
2
3
4
5
6
7
$hah = function($name){
print("Hello $name\n");
}; // 和赋值变量一样,这里要有分号结束
$hah("PHP");
$hah("best language!");lamadba匿名函数
1
2
call_user_func(function($name){print("hello, $name");}, 'test');-
生成器函数和普通函数语法一样,不同的是普通函数返回一个值,而生成器可以生成一组值。
简单的实例生成一组从1-10的值:
1
2
3
4
5
6
7
8
9
10
function generate(){
for($i=1; $i <= 10; $i++){
yield $i;
}
}
$gen = generate();
foreach($gen as $key => $value){
echo "$value\n";
}还可以指定key
1
2
3
4
5
6
7
8
9
10
11
function gen(){
for($i=1; $i<=10; $i++){
yield $i => $i*$i;
}
}
$g = gen();
foreach ($g as $key => $value){
echo "$key:$value\n";
}若将yield生成器写入表达式需要使用括号包裹。
1
2$data = (yield $var);
$cata = (yield $key => $value);
操作文件(读取,写入,路径)
读取
1
2
3
4
5
$myfile = fopen("web.txat", "r") or die("Unable to open file!");
echo fread($myfile,filesize("web.txt"));
fclose($myfile);我们注意到使用
fopen
函数打开文件,有传递参数,一个是文件名,另一个是以只读模式打开文件打开的文件需要存在并且要有路径描述。
关于路径有两种路径描述方式:
- 相对路径,即相对于当前php文件的路径。如在当前目录即与php文件同一目录下有个
web.txt
,它的路径就是web.txt
或者./web.txt
,一个点表示同级目录,如果在当前目录的上一级目录下有个hello.txt
,路径调用就是../fello.txt
, 每个../
都表示向上级跨一个目录 。如果调用的文件还在上上上级目录下呢,就是../../../file.txt
。 - 绝对路径,即是从顶级/根目录开始的,比如我在桌面上有个
work.txt
,那么它的绝对路径就是C:/Destop/work.txt
。
关于打开模式这里用的是r只读, 其他模式参见下表:
fread()
函数读取文件,第一个参数打开文件的变量,第二个是规定打开读取的最大字节数。fread($myfile,filesize("web.txt"));
用filesize
获取文件的所有字节数作为参数表示全部读完。除
fread()
读取函数之外还有好多,fget()
每次读取一行,还有诸如readfile()
,file_get_content()
,file
,highlight()
等。fclose()
函数用于关闭打开的文件,参数是打开文件的变量。- 相对路径,即相对于当前php文件的路径。如在当前目录即与php文件同一目录下有个
写入
1
2
3
4
5
6
7
8
$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
$txt = "Bill Gates\n";
fwrite($myfile, $txt);
$txt = "Steve Jobs\n";
fwrite($myfile, $txt);
fclose($myfile);用
fopen()
函数w
写模式打开文件。fwrite()
写函数,同类型函数有file_put_content()
等。注意,用
w
模式写入已有内容的文件将会覆盖源文件。路径
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16// basename($path) 返回路径中的文件名部分,参数是绝对路径
$path = "c:/Destop/word.txt";
echo basename($path); //输出word.txt
//dirname($path) 获取目录名
echo dirname($path); //输出c:\Destop
//pathinfo($path) 数组有三项,1.目录名 2.文件名 3.文件拓展名 默认全部返回
// 对应PATHINFO_DIRNAME,PATHINFO_BASENAME 和 PATHINFO_EXTENSION。
$path_arr = pathinfo($path);
echo $path_arr["dirname"]; //c:/Destop
echo $path_arr["filename"]; //word.txt
echo $path_arr["extension"]; //txt
//直接获取扩展名
echo pathinfo($path, PATHINFO_EXTENSION);
操作系统(动词)(执行系统操作)
所谓操作系统其实就是通过调用php系统函数执行命令。
php的内置函数exec,system都可以调用系统命令(shell命令),当然还有passthru,escapeshellcmd等函数。
注意:生产环境中禁止开启。测试时要想使用这系统函数需在php.ini中的安全模式必须关闭,即找到 disable_functions注释掉。
1
2
3
4
5
6
7
8
9
10
echo exec("dir"); //列出当前目录下所有的文件
echo exec("ping baidu.com"); //ping baidu.com
echo exec("ipconfig"); //查看系统IP配置
passthru("ping baidu.com"); //直接输出结果无需echo
system("ipconfig");
echo `dir`; //反撇号与shell_exec一样
echo shell_exec('dir');
作为组件(了解:l/wamp架构)
我们认识了工具并知道工具怎么用了之后,但是不足以能拿起来去大杀四方,我们需要召集伙伴,召集兄弟一起上,才能发挥真正的实力。
lamp:linux,apache,mysql,php
linux:操作系统
apache: Web服务器的一种,用以接收HTTP请求和响应。还有其他有名的如nginx, iis, lighttpd等
mysql: 数据库,用于储存数据。其他数据库还有mssql,oracel , mangodb, redis等。
php:用于处理HTTP请求和应答。
Windows安装
在windows上我们可以直接安装phpstudy, wamp继承环境。以phpstudy为例:
可能会提示缺少一些组件,百度下组件下载安装就好了
当全为绿色就是服务全部启动了,浏览器访问localhost页面显示hello world证明已全部安装好,可以搞事了。
linux安装
关于linux如何安装,这里不做赘述(玩linux就是要多折腾),可以选择一键安装包,也可以自行安装配置。
配置
Linux配置文件常见路径
php: /etc/php7/apache2/php.ini
apache: /etc/apache2/apache2.conf
mysql: /etc/mysql/my.cnf 一般不要使用,尤其是新手
apache中导入php模块
Windows继承环境配置文件
操作数据库(连接,程序)
php中有几种数据库操作函数,这里选用PDO拓展,因为它采用参数化查询,因而更加安全可靠。
PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口。
PDO 提供了一个数据访问抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。
Windows:PDO 和所有主要的驱动作为共享扩展随 PHP 一起发布,要激活它们只需简单地编辑 php.ini 文件,并添加以下扩展:
extension=php_pdo.dll
Linux:
extension=pdo.so
连接
1 |
|
执行
1 | $user_arr = $dbc->query("select * from test"); // 从test这个表查询所有数据 |
PDO预处理语句
传统SQL语句都是通过拼接字符串加入用户提交的参数,而预处理是在执行sql语句之前对SQL查询语句进行处理,处理后所有提交的参数将作为字符串绑定到参数上,然后执行SQL语句。
这样做的目的是为了避免用户提交恶意的查询参数,获取到其他数据。
1 |
|
更多详见PDO
操作HTTP请求
什么是HTTP呢?
搞Web的都知道HTTP这个名字,但HTTP具体是用来做什么的呢?
HTTP翻译是超文本传输协议,它定义了访问远端机器上的html文件,并返回应答内容。
那么如何请求呢?
HTTP定义了几种请求方法,大概8种:
GET: 向指定的资源发出”显示”的请求,GET方法多用于读取数据。
POST: 向指定的资源提交数据,请求服务器处理,多用于提交表单和上传文件。
HEAD: 与GET方法一样,都是向服务器发出指定资源的请求。只获取关于资源的信息,返回数据。
PUT: 向指定资源位置上传其最新内容。
DELETE: 请求服务器删除Request-URL所标识的资源。
TRACE:回显服务器收到的请求,主要用于诊断或测试。
OPTIONS: 返回服务端资源所有支持的方法。
CONNECT:HTTP/1.1中预留给能够将连接改为管道方式的代理器。
PATCH: 用于将局部修改应用到资源,不常用。
收到请求,如何应答呢?
所有HTTP响应的分为两部分,一部分是响应头,另一部分是响应内容。
响应头第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。
状态代码的第一个数字代表当前响应的类型:
- 1xx消息——请求已被服务器接收,继续处理
- 2xx成功——请求已成功被服务器接收、理解、并接受
- 3xx重定向——需要后续操作才能完成这一请求
- 4xx请求错误——请求含有词法错误或者无法被执行
- 5xx服务器错误——服务器在处理某个正确请求时发生错误
响应头其他行为服务器信息。
在HTTP响应头后(紧跟着一个空行后的HTML格式的文本)
HTTP示例(访问的百度HTTP请求和应答(工具为burpsuite))
PHP如何操作呢?
在开始还需要了解下URL资源,也就是我们常说的网站的网址。比如百度百科url是什么网址:
https://baike.baidu.com/item/url/110640?fr=aladdin
它由4部分组成:协议(https,加密传输的http),主机地址(baike.baidu.com,由DNS解析为IP后访问),端口号(默认80不写),远程主机目录(/item/url/110640),参数(fr), 参数值(aladdin)
协议:http, https, ftp, file, mailto, news, ldap, telnet…….后加://
主机地址:域名/IP+端口
远程主机目录:需要访问文件文件的的路径,包含等级结构的路径定义,一般来说不同部分之间以斜线(/)分隔
参数:为了更加方便的访问用户想访问的资源,后端定义了一个参数,可以向这个参数传递值。多个参数之间需要用&若参数值为
&
需用转义符号\
转义\&
位置标识符#:在第一个#后面出现的任何字符,都会被浏览器解读为位置标识符。
(部分协议需要再加用户名@密码 如:ftp://用户名:密码@FTP服务器IP地址或域名:FTP命令端口/路径/文件名)
1 |
|