dirname($_server['php_self']),0113,服务器常用变量$_SERVER,过滤器基础与序列化操作...

WEB服务器变量

$_SERVER

它是一个包含诸如头部(header)、路径(path)、执行脚本文件(PHP_SELF)等当前服务器信息的数组。

通过PHP命令可以输出当前服务器信息进行查看

// 输出当前服务器具体数据

echo'

'.print_r($_SERVER,true).'
';

可以看出输出的数据是一个二维数组

f3279bc7ac165620c33cdb9c845e4d49.png

WBE服务器常用变量

1.SERVER_NAME

// 访问一个二维数组,直接在[]里面添加键名就行。

// 获取并输出当前服务器主机名

echo $_SERVER['SERVER_NAME'];

e7a6ce56b43818e679e7ec6c6e36c892.png

2.PHP_SELF

// 获取并输出当前PHP执行脚本(文件)的路径以及名称

echo $_SERVER['PHP_SELF'];

58eff5692efb54e6b0cbc425c387e616.png

3.REQUEST_METHOD

// 获取并输出当前发送数据请求的方式,因为没设置,默认就是GET方法

echo $_SERVER['REQUEST_METHOD'];

d69a635e7d5b802728c308df5f3b55c1.png

4.QUERY_STRING

// 获取并输出当前地址栏上的查询字符串。

echo $_SERVER['QUERY_STRING'];

8bd69f877b79722cc09a4018188ee61a.png

5.SERVER_PORT

端口 80,是HTTP://协议, 端口443,是HTTPS://协议

// 获取并输出当前服务器开放的端口

echo $_SERVER['SERVER_PORT'];

74eabcc1270ba89c2f10a91b02a5196e.png

6.SERVER_URI

// 获取并输出当前PHP执行脚本(文件)的路径以及名称

echo'PHP_SELF输出为:'.$_SERVER['PHP_SELF'];

echo'


';

// 获取并输出当前地址栏除主机名外的所有字符串

echo'REQUEST_URI输出为:'.$_SERVER['REQUEST_URI'];

bd9f63e4c3ee6b8e90179fb2af1336e2.png

7.HTTP_HOST

// 获取并输出当前服务器主机名

echo'SERVER_NAME输出为:'.$_SERVER['SERVER_NAME'];

// 它的输出虽然和SERVER_NAME类似,但是它更安全可靠

echo'HTTP_HOST输出为:'.$_SERVER['HTTP_HOST'];

bd6d8631ff9357d7813927ee65cb2e54.png

8.SCRIPT_FILENAME

// 获取并输出当前脚本(PHP文件)的绝对路径

echo $_SERVER['SCRIPT_FILENAME'];

910542d6f8e1c20c86c4835d8d4ba395.png

以上是关于服务器常用的变量

过滤器(常用)

1.filter_has_var:检测是否存在指定类型的变量,成功返回true,失败返回false

格式:filter_has_var(数组变量,’键名’)

数组变量包括 INPUT_GET,INPUT_POST,INPUT_COOKIE,INPUT_SERVER,INPUT_ENV里面的其中一个。

键名就是以上数组里面包含的需要过滤的键名即可。

// 使用过滤器检查$_GET['id']是否存在

// INPUT_GET,'id',等价于$_GET['id']

echo filter_has_var(INPUT_GET,'id')?'存在ID':'不存在';

e83b5ba6a227e5c10b3dcaa281d06ee6.png

2.filter_input:通过指定的数组变量获取其值,成功返回所请求的变量值,如果不存在,返回null

格式:filter_input(数组变量,’键名’)

数组变量包括 INPUT_GET,INPUT_POST,INPUT_COOKIE,INPUT_SERVER,INPUT_ENV里面的其中一个。

键名就是以上数组里面包含的需要过滤的键名即可。

// 检查ID,不存在,用gettype查看类型,可以发现为NULL

echo'ID值为:'.gettype(filter_input(INPUT_GET,'id'));

fdb261c555a3c374dfaa25c7f73d34ce.png

3.filter_var:调用用户定义的变量

格式:filter_var(用户自定义变量,过滤器参数)

$email='admin@qq.com';

// filter_var,主要是过滤检测用户自定义的变量

echo'email返回值为:'.filter_var($email,FILTER_VALIDATE_EMAIL);

7766f659236d8d1e476db3ef4abf9c87.png

添加过滤参数(常用)

FILTER_VALIDATE_EMAIL:把值作为EMAIL格式验证

// FILTER_VALIDATE_EMAIL表示为把需要过滤的数值用EMAIL格式进行验证

// 验证成功,输出该值,失败返回false

echo'邮箱验证正确输出为:'.filter_input(INPUT_POST,'email',FILTER_VALIDATE_EMAIL);

0f9df29b3c31e6aa3e100667db73669c.png

FILTER_SANITIZE_URL:过滤掉(删除)字符串中所有非法的URL字符

// 首先创建一个关于URL(链接)的字符串

$url='https://www.baidu.co、m';

// 输出该字符串原始样子

echo $url.'


';

// 过滤掉字符串里面非法的URL字符

echo filter_var($url,FILTER_SANITIZE_URL);

dd5cf0099ce695b46a6e4abe0ddb1b4f.png

FILTER_VALIDATE_INT:检测变量的值是否为整数

$num=11.5;

echo filter_var($url,FILTER_VALIDATE_INT)?'num的值为:':'num的值不为整数';

fe34742321d9506c2e3546e2eb7dae62.png

FILTER_SANITIZE_NUMBER_INT:把字符串转换为数值型,并删除字符串中非法的数值型字符(允许保留’+’、’-‘)

$num='11.5+5+6@5';

echo'原始值为:'.$num;

echo'


';

echo filter_var($num,FILTER_SANITIZE_NUMBER_INT);

4ce0860a75e147bee74d48ec6f476498.png

结合上面的函数,做一个简单的数据判断与页面访问的合法性

数据判断

//首先检测$_POST里面有没有email

//filter_has_var,返回值为布尔值

if(filter_has_var(INPUT_POST,'email')){

//如果email有值,则检测它的值是否符合email格式

//filter_input,返回值为email的值

if(filter_input(INPUT_POST,'email',FILTER_VALIDATE_EMAIL)){

//格式正确输出

echo'邮箱正确';

}else{

//格式错误则输出

echo'邮箱格式错误';

}

}else{

//如果没检测到直接输出此条信息

echo'没有检测到电子邮箱';

}

a4c31fa26f0f116adceb33f6e1876613.png

页面访问合法性

1.$_SERVERL里的’HTTP_REFERER’

// HTTP_REFERER 返回值为页面跳转前的链接/路径(页面来源链接/路径)

echo'跳转过来的页面链接为:'.filter_input(INPUT_SERVER,'HTTP_REFERER');

e383ab8463613ed7bf5a1ac0c08ebf13.png

2.dirname(),参数是一个包含有指向一个文件的全路径的字符串。该函数返回去掉文件名后的目录名。

echo'跳转过来的页面链接为'.filter_input(INPUT_SERVER,'HTTP_REFERER');

echo'


';

// dirname() 参数是一个包含有指向一个文件的全路径的字符串。该函数返回去掉文件名后的目录名。

echo'输出为跳转过来的页面链接去掉文件名后的目录名:'.dirname(filter_input(INPUT_SERVER,'HTTP_REFERER'));

2ab10e5b37a18bf7e3321a84b125a257.png

3.in_array()搜索数组中是否存在指定的值。

//创建一个数组

$arr=['a','b','c','d'];

//创建一个变量,值与数组里有一个相同

$value='b';

if(in_array($value,$arr)){

echo'在数组$arr中查询到与$value相同的值';

}else{

echo'未查询到相同的值';

}

2286d6b621bb3549b19c925255ffb564.png

4.根据上面3个例子,组合起来,就可以写出一个只允许某些链接访问的页面

// 获取到跳转过来的页面地址

$url=filter_input(INPUT_SERVER,'HTTP_REFERER');

// 通过获取跳转页面的地址,来获取到除文件名外的其他链接信息

$rusdir=dirname(filter_input(INPUT_SERVER,'HTTP_REFERER'));

// 创建一个包含允许链接的数组

$urls=[

// 把获取到的链接目录,拼接上允许访问的文件名即可

$rusdir.'/admin.php',

$rusdir.'/reg.php',

$rusdir.'/about.php',

];

// 我是分割线

echo'


';

// 使用in_array()函数查询当前跳转页面的链接是否合法(是否与事先创建的允许链接相同)

if(in_array($url,$urls)){

echo'链接来源合法';

}else{

echo'非法链接';

}

图1

6f169249a5e40ffe58779340e40b6c34.png

图2

9a0217209628586e2051130806f7ee83.png

最后预习下cookie要使用到的序列化与反序列化操作

1.序列化函数serialize(),参数为数组,返回值为字符串,但是它会保留序列化以前的类型与结构

// 序列化

// 创建一个数组

$arr=[50,'abc','123',9];

// 序列化它并赋值给前面的变量

$item=serialize($arr);

echo $item;

8360802335519ae9c469b7a1a2292133.png

2.反序列化unserialize()参数为序列化后的值,返回值为数组

$a1=unserialize('a:4:{i:0;i:50;i:1;s:3:"abc";i:2;s:3:"123";i:3;i:9;}');

echo'$a1的类型为:'.gettype($a1).'


';

echo'$a1的值为:

'.print_r($a1,true).'
';

ce1aed7446afa837e089480fbed5de02.png

又完成一节课程了,这节课在最开始看的时候,感觉很迷茫,特别是过滤器与服务器变量,第一遍看的时候一脸懵逼。然后在看第二遍的时候,一遍观看,一遍对照PHP手册,终于看懂了,但是如果不多练习,感觉过几天又得搞忘- -,所以这次写的比较细,就是怕忘记了,回看笔记的时候又看不懂,那就太难了(=。=###)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值