函式名: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 引數進行處理,以便獲取匹配的索引號。