函数名:expect_expectl()
函数描述:expect_expectl() 函数用于等待期望的输入响应,匹配字符串,当匹配到期望的字符串时,就返回相应的值。
适用版本:该函数适用于 PHP 4、PHP 5、PHP 7
语法:string expect_expectl ( resource $stream , array $cases [, int &$match ] )
参数:
- stream:一个打开的流资源,通常是通过 fopen() 或 proc_open() 函数获得的。
- cases:一个数组,包含了期望的模式和相应的处理结果,数组的键是正则表达式模式,值是匹配到该模式时的处理结果。
- 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 参数进行处理,以便获取匹配的索引号。