PHP代码函数解析
全篇的代码解释在最后
后面有整体代码解释,第一次写博客,望个位大佬担待ヾ(≧▽≦*)o
代码中函数的解释
1.isset
函数检测变量是否已声明并且其值不为 null
这里我使用了GET传参更能直白的看见isset函数的效果。
<?php
//在if语句中使用isset函数来判断cmd是否有传值若有则答应出来,反之告诉用户输入为空,请重新输入
if( isset( $_GET[ 'cmd' ] ) ){
echo $_GET[ 'cmd' ];
}
else{
echo "输入为空,请重新输入";
}
?>
传入参数后的结果
没有传入参数的结果
2.checkToken
函数通常用于验证表单提交的数据是否合法,以防止跨站点请求伪造(CSRF)攻击。
用checkToken函数来确认页面的user_token,session_token和页面重定向
user_token通常是在用户登录时生成的,用于标识用户身份和授权用户访问系统中的资源。它通常是长期有效的,直到用户注销或者修改密码等操作;
session_token则是在用户每次访问系统时生成的,用于标识用户当前的会话状态和授权用户访问当前会话中的资源。它通常是短期有效的,当用户关闭浏览器或者长时间不活动时会自动失效;
// $_REQUEST函数默认情况下包含了 $_GET,$_POST 和 $_COOKIE 三种方法。
/*$_SESSION它允许在不同页面和请求之间保持用户数据的状态。当一个用户访问一个网站时,
服务器会为该用户创建一个唯一的会话 ID,并将该 ID 存储在用户的浏览器中的 cookie 中。
在用户的后续请求中,服务器可以使用该会话 ID 来访问该用户的会话数据。*/
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
3.stripslashes
函数是 PHP 中的一个字符串处理函数,用于删除反斜杠。
在 PHP 中,反斜杠(\)通常用于转义特殊字符,例如双引号、单引号、换行符等。但是有时候我们需要将字符串中的反斜杠删除,这时候就可以使用 stripslashes 函数;
<?php
//给str赋予一个值
$str = "Is your name O\'reilly?";
echo $str;
echo "<br />";
// 使用stripslasher函数删除反斜杠
echo stripslashes($str);
?>
4.explode
使用一个字符串分割另一个字符串
这里我输入了一串IP例如192.168.143.121,然后使用explode函数通过.
将IP分割为四组
<?php
//传入一个IP值
$target = $_REQUEST[ 'ip' ];
// 通过.将IP分为四组
$octet = explode( ".", $target );
echo "<br />";
echo $octet[0];
echo "<br />";
echo $octet[1];
echo "<br />";
echo $octet[2];
echo "<br />";
echo $octet[3];
?>
5.is_numeric
检测变量是否为数字或数字字符串
<?php
//传入一个IP值
$target = $_REQUEST[ 'ip' ];
// 通过.将IP分为四组
$octet = explode( ".", $target );
echo "<br />";
echo $octet[0];
echo "<br />";
echo $octet[1];
echo "<br />";
echo $octet[2];
echo "<br />";
echo $octet[3]."<br />";
//用if来做判断,用is_numeric函数来判断是否为数字字符串,用sizof函数来匹配每组字符串是否为四个数字字符串
if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ){
echo "全是数字字符串,并且每组都有四个数字字符串";
}
else{
echo "输入IP有误,重新输入";
}
?>) )
6.数组的拼接
//通过`.`将分割后的数组拼接起来
$target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];
7.stristr()
函数用于查找字符串中第一次出现指定子字符串的位置,并返回该子字符串及其后面的所有字符。
<?php
$email = 'USER@EXAMPLE.com';
//stristr函数匹配第一个e字符串后输出之后的字符串
echo stristr($email, 'e')."<br />";
//当给stristr函数一个true时。匹配第一个e字符串后输出之前的字符串
echo stristr($email, 'e', true);
?>
8.php_uname()
返回了运行 PHP 的操作系统的描述。
- ‘a’:此为默认。包含序列 “s n r v m” 里的所有模式。
- ‘s’:操作系统名称。例如: FreeBSD。
- ‘n’:主机名。例如: localhost.example.com。
- ‘r’:版本名称,例如: 5.1.2-RELEASE。
- ‘v’:版本信息。操作系统之间有很大的不同。
- ‘m’:机器类型。例如:i386
//php_uname返回版本信息其中的s是php_uname的参数
echo php_uname('s');
9.shell_exec
通过 shell 执行命令并将完整的输出以字符串的方式返回
<?php
//通过shell_exec执行ipconfig命令查询IP信息
$output = shell_exec(ipconfig);
//将执行后的结果输出到页面上
echo "<pre>$output</pre>";
?>
10.generateSessionToken()
函数
这个函数的作用是生成一个会话令牌(Session Token),用于在客户端和服务器之间建立会话。会话令牌通常是一个随机生成的字符串,用于标识一个特定的用户会话。在客户端登录后,服务器会生成一个会话令牌并将其返回给客户端,客户端在后续的请求中需要携带这个会话令牌,以便服务器能够识别该用户的身份并提供相应的服务。
整体代码解析
<?php
//判断post传参是否为空
if( isset( $_POST[ 'Submit' ] ) ) {
// 用checktoken验证页面的user_token,session_token,和首页的重定向
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
// 获取传入IP值
$target = $_REQUEST[ 'ip' ];
//利用stripslasher函数删除IP值中的反斜杠
$target = stripslashes( $target );
// 通过.符号将IP信息分割
$octet = explode( ".", $target );
// 使用is_numeric判断每组数组是否为数字或者数字字符串,使用sizeof判断每组是否为4位
if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {
// 将每四位数字重新拼接起来
$target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];
// 利用stristr函数忽略大小写版本号,使用php_uname函数判断php操作系统。s代表操作系统名称
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// 如果是windows系统ping+IP地址
$cmd = shell_exec( 'ping ' . $target );
}
else {
// 如果是Linux系统ping四次IP地址
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
// 输出最终的结果
echo "<pre>{$cmd}</pre>";
}
else {
// 否则告诉用户输入IP地址有错
echo '<pre>ERROR: You have entered an invalid IP.</pre>';
}
}
// 创建唯一token值
generateSessionToken();
?>