1、Exec函数
    exec函数用来执行一个外部的应用程序,用法如下:
    exec(string **cmd, [array output, int return_var])
    cmd**:执行的命令
    output:用来获得执行命令输出的每一行字符串,如果数组中已经包含了部分元素,exec() 函数会在数组末尾追加内容。如果你不想在数组末尾进行追加,请在传入 exec() 函数之前对数组使用unset()函数进行重置
    return_var:存放执行命令返回值,0为执行成功状态,1为执行失败状态

    1. <?php
    2. header('Content-type: text/html; charset=GBK');
    3. exec("ipconfig",$output,$stats);
    4. echo "<pre>";
    5. echo $stats ."<br/>";
    6. var_dump($output);
    7. echo "</pre>";
    8. ?>

    image.png

    2、System函数
    system函数**用来执行一个外部的应用程序并显示输出结果,用法如下:
    system(string cmd, **[int return_var]**)
    cmd**:执行的命令
    return_var:存放执行命令返回值,0为执行成功状态,1为执行失败状态

    <?php
    header('Content-type: text/html; charset=GBK');
    echo "<pre>";
    system("ipconfig",$stats);
    echo "</pre>";
    ?>
    

    image.png

    3、Passthru函数
    passthru函数**执行一个外部的应用程序并显示输出结果(与system使用并无太大差别)**,用法如下:
    passthru**(string cmd, [int return_var]**)
    cmd**执行的命令
    return_var:**存放执行命令返回值,0为执行成功状态,1为执行失败状态
    注:当UNIX系统命令输出是二进制数据,需用passthru代替exec和system函数

    <?php
    header('Content-type: text/html; charset=GBK');
    echo "<pre>";
    passthru("ipconfig");
    echo "</pre>";
    ?>
    

    4、Shell_exec函数
    shell_exec函数用来执行shell命令**并返回完整的输出字符串**,用法如下:
    shell_exec(string **cmd**)
    cmd**:**执行的命令

    <?php
    header('Content-type: text/html; charset=GBK');
    $a = shell_exec("ipconfig");
    
    echo "<pre>";
    echo $a;
    echo "</pre>"
    ?>
    

    image.png



    5、运算符
    “``”运算符用来执行shell命令并返回完整的输出字符串,**与shell_exec函数功能相同

    <?php
    header('Content-type: text/html; charset=GBK');
    $a = `ipconfig`;
    echo "<pre>";
    echo $a;
    echo "</pre>"
    ?>
    

    6、Eval函数
    eval函数字符串按照PHP代码,该字符串必须是合法的 PHP 代码,**且必须以分号结尾**
    注:如果没有在代码字符串中调用 return 语句,则返回NULL。如果代码中存在解析错误,则eval()函数返回False

    <?php
    header('Content-type: text/html; charset=GBK');
    
    $myvar = "var_name";
    $cmd = $_GET["cmd"];
    
    if(isset($cmd))
    {
    eval("$cmd");
    }
    ?>
    

    image.png

    注:**如果执行失败,需要查看php.ini的magic_quotes_gpc设置是否为On(在PHP5版本及以前),设置为On会对“””或者“’”进行转义,变成“\””或者“\’”,在PHP6,PHP7是没有magic_quotes_gpc这个选项并且默认为关闭

    7、Preg_replace函数
    preg_replace 函数执行一个**正则表达式的搜索和替换,并返回替换的字符串**,用法如下:
    preg_replace(mixed $pattern, mixed $replacement, mixed $subject, [int $limit, int $count]**)
    $pattern:要搜索的正则表达式,可以是字符串或一个字符串数组
    $replacement:用于替换的字符串或字符串数组
    $subject:要搜索替换的目标字符串或字符串数组
    $limit:可选,对于每个模式用于每个 subject 字符串的最大可替换次数。 默认是-1(无限制)
    $count::**可选,为替换执行的次数

    <?php
    $string = "I am Corgi";
    $pattern = "/^/e";
    echo preg_replace($pattern,$_GET["cmd"],$string);
    ?>
    

    image.png


    8、Call_user_func函数
    call_user_func调用一个自定义函数并输出,如有错误返回False,用法如下:
    call_user_func(callback function, [mixed parameter])
    function:调用自定义函数名称
    parameter:**自定义函数参数

    <?php
    call_user_func($_GET['fun'],$_GET['cmd']);
    ?>
    

    image.png

    9、Call_user_func_array
    call_user_func_array调用一个自定义函数并输出,如有错误返回False,用法如下:
    call_user_func_array(callback function,** [array param_arr]**)
    function:调用自定义函数名称
    param_arr:参数数组作为回调函数的的参数传入

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

    image.png

    10、Create_function
    create_function创建一个匿名函数,并为其返回唯一名称,用法如下:
    create_function(string args,string code**)**

    create_function(string args,string code)
    等同于下面,并且eval
    eval(
    function_lambda_func($args){
    $code;
    })
    

    args:声明的函数变量部分
    code:执行的方法代码部分
    注:PHP 7.2以后废弃

    <?php
    $cmd = $_GET['cmd'];
    $c = create_function('',$cmd);
    $c();
    ?>
    

    image.png