查詢

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函式
分享連結