WEB服务器变量
$_SERVER
它是一个包含诸如头部(header)、路径(path)、执行脚本文件(PHP_SELF)等当前服务器信息的数组。
通过PHP命令可以输出当前服务器信息进行查看
// 输出当前服务器具体数据
echo'
'.print_r($_SERVER,true).'';
可以看出输出的数据是一个二维数组
WBE服务器常用变量
1.SERVER_NAME
// 访问一个二维数组,直接在[]里面添加键名就行。
// 获取并输出当前服务器主机名
echo $_SERVER['SERVER_NAME'];
图
2.PHP_SELF
// 获取并输出当前PHP执行脚本(文件)的路径以及名称
echo $_SERVER['PHP_SELF'];
图
3.REQUEST_METHOD
// 获取并输出当前发送数据请求的方式,因为没设置,默认就是GET方法
echo $_SERVER['REQUEST_METHOD'];
图
4.QUERY_STRING
// 获取并输出当前地址栏上的查询字符串。
echo $_SERVER['QUERY_STRING'];
图
5.SERVER_PORT
端口 80,是HTTP://协议, 端口443,是HTTPS://协议
// 获取并输出当前服务器开放的端口
echo $_SERVER['SERVER_PORT'];
图
6.SERVER_URI
// 获取并输出当前PHP执行脚本(文件)的路径以及名称
echo'PHP_SELF输出为:'.$_SERVER['PHP_SELF'];
echo'
';
// 获取并输出当前地址栏除主机名外的所有字符串
echo'REQUEST_URI输出为:'.$_SERVER['REQUEST_URI'];
图
7.HTTP_HOST
// 获取并输出当前服务器主机名
echo'SERVER_NAME输出为:'.$_SERVER['SERVER_NAME'];
// 它的输出虽然和SERVER_NAME类似,但是它更安全可靠
echo'HTTP_HOST输出为:'.$_SERVER['HTTP_HOST'];
图
8.SCRIPT_FILENAME
// 获取并输出当前脚本(PHP文件)的绝对路径
echo $_SERVER['SCRIPT_FILENAME'];
图
以上是关于服务器常用的变量
过滤器(常用)
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':'不存在';
图
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'));
图
3.filter_var:调用用户定义的变量
格式:filter_var(用户自定义变量,过滤器参数)
例
$email='admin@qq.com';
// filter_var,主要是过滤检测用户自定义的变量
echo'email返回值为:'.filter_var($email,FILTER_VALIDATE_EMAIL);
图
添加过滤参数(常用)
FILTER_VALIDATE_EMAIL:把值作为EMAIL格式验证
例
// FILTER_VALIDATE_EMAIL表示为把需要过滤的数值用EMAIL格式进行验证
// 验证成功,输出该值,失败返回false
echo'邮箱验证正确输出为:'.filter_input(INPUT_POST,'email',FILTER_VALIDATE_EMAIL);
图
FILTER_SANITIZE_URL:过滤掉(删除)字符串中所有非法的URL字符
例
// 首先创建一个关于URL(链接)的字符串
$url='https://www.baidu.co、m';
// 输出该字符串原始样子
echo $url.'
';
// 过滤掉字符串里面非法的URL字符
echo filter_var($url,FILTER_SANITIZE_URL);
图
FILTER_VALIDATE_INT:检测变量的值是否为整数
例
$num=11.5;
echo filter_var($url,FILTER_VALIDATE_INT)?'num的值为:':'num的值不为整数';
图
FILTER_SANITIZE_NUMBER_INT:把字符串转换为数值型,并删除字符串中非法的数值型字符(允许保留’+’、’-‘)
例
$num='11.5+5+6@5';
echo'原始值为:'.$num;
echo'
';
echo filter_var($num,FILTER_SANITIZE_NUMBER_INT);
图
结合上面的函数,做一个简单的数据判断与页面访问的合法性
数据判断
例
//首先检测$_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'没有检测到电子邮箱';
}
图
页面访问合法性
1.$_SERVERL里的’HTTP_REFERER’
// HTTP_REFERER 返回值为页面跳转前的链接/路径(页面来源链接/路径)
echo'跳转过来的页面链接为:'.filter_input(INPUT_SERVER,'HTTP_REFERER');
图
2.dirname(),参数是一个包含有指向一个文件的全路径的字符串。该函数返回去掉文件名后的目录名。
echo'跳转过来的页面链接为'.filter_input(INPUT_SERVER,'HTTP_REFERER');
echo'
';
// dirname() 参数是一个包含有指向一个文件的全路径的字符串。该函数返回去掉文件名后的目录名。
echo'输出为跳转过来的页面链接去掉文件名后的目录名:'.dirname(filter_input(INPUT_SERVER,'HTTP_REFERER'));
图
3.in_array()搜索数组中是否存在指定的值。
//创建一个数组
$arr=['a','b','c','d'];
//创建一个变量,值与数组里有一个相同
$value='b';
if(in_array($value,$arr)){
echo'在数组$arr中查询到与$value相同的值';
}else{
echo'未查询到相同的值';
}
图
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
图2
最后预习下cookie要使用到的序列化与反序列化操作
1.序列化函数serialize(),参数为数组,返回值为字符串,但是它会保留序列化以前的类型与结构
例
// 序列化
// 创建一个数组
$arr=[50,'abc','123',9];
// 序列化它并赋值给前面的变量
$item=serialize($arr);
echo $item;
图
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).'';
图
又完成一节课程了,这节课在最开始看的时候,感觉很迷茫,特别是过滤器与服务器变量,第一遍看的时候一脸懵逼。然后在看第二遍的时候,一遍观看,一遍对照PHP手册,终于看懂了,但是如果不多练习,感觉过几天又得搞忘- -,所以这次写的比较细,就是怕忘记了,回看笔记的时候又看不懂,那就太难了(=。=###)。