查询

expect_expectl()函数—用法及示例

「 等待期望的输入响应,匹配字符串,当匹配到期望的字符串时,就返回相应的值 」


函数名:expect_expectl()

函数描述:expect_expectl() 函数用于等待期望的输入响应,匹配字符串,当匹配到期望的字符串时,就返回相应的值。

适用版本:该函数适用于 PHP 4、PHP 5、PHP 7

语法:string expect_expectl ( resource $stream , array $cases [, int &$match ] )

参数:

  1. stream:一个打开的流资源,通常是通过 fopen() 或 proc_open() 函数获得的。
  2. cases:一个数组,包含了期望的模式和相应的处理结果,数组的键是正则表达式模式,值是匹配到该模式时的处理结果。
  3. match(可选):用于存储匹配到的索引号。

返回值:如果某个模式匹配到了输入的字符串,函数会返回对应的处理结果字符串。如果没有匹配到,函数将返回 FALSE。

示例: 以下示例演示了 expect_expectl() 函数的基本用法:

// 创建一个与shell进程进行通信的流 $stream = fopen('php://stdout', 'r+');

// 定义期望的模式和相应的处理结果 $cases = array( '/password:/' => function($stream) { fwrite($stream, "secret\n"); }, '/$/i' => function($stream) { fwrite($stream, "echo 'Hello, World!';\n"); } );

// 运行 expect_expectl() 函数等待响应并处理 while (true) { $result = expect_expectl($stream, $cases);

if ($result === FALSE) {
    echo '未匹配到期望的字符串';
    break;
} elseif ($result === 1) {
    echo '输入密码';
} elseif ($result === 2) {
    echo '执行命令';
    break;
}    

}

fclose($stream);

在上面的示例中,我们创建了一个流资源并定义了两个期望的模式和对应的处理结果。然后,通过循环调用 expect_expectl() 函数,等待并处理用户输入的响应。当匹配到 "/password:/" 时,函数会将 "secret" 作为密码输入;当匹配到 "/$/" 时,函数会执行 "echo 'Hello, World!';" 命令。如果没有匹配到期望的字符串,会输出 "未匹配到期望的字符串",并终止循环。

注意:在实际应用中,你可以根据具体的需求自定义不同的模式和处理结果。同时,你也可以对 $match 参数进行处理,以便获取匹配的索引号。

补充纠错
上一个函数: expect://()函数
下一个函数: expect_popen()函数
热门PHP函数
分享链接