Php/docs/expect.examples-usage

提供:Dev Guides
< Php
移動先:案内検索

Expect の使用例

例1 Expect の使用例

この例ではリモートホストに SSH 経由で接続し、接続先の稼働時間を表示します。


<?phpini_set("expect.loguser", "Off");$stream = fopen("expect://ssh root@remotehost uptime", "r");$cases = array (    array (0 => "password:", 1 => PASSWORD));switch (expect_expectl ($stream, $cases)) {    case PASSWORD:        fwrite ($stream, "password\n");        break;     default:        die ("リモートホストへの接続時にエラーが発生しました!\n");}while ($line = fgets($stream)) {      print $line;}fclose ($stream);?>

次の例は、リモートホストに接続して インストールされている OS が 32 ビットか 64 ビットかを確認し、 それぞれのパッケージのアップデートを実行します。

例2 もうひとつの Expect の使用例

<?phpini_set("expect.timeout", -1);ini_set("expect.loguser", "Off");$stream = expect_popen("ssh root@remotehost");while (true) {    switch (expect_expectl ($stream, array (            array ("password:", PASSWORD), // SSH がパスワードを問い合わせます            array ("yes/no)?", YESNO), // SSH がホストエントリを保存するかどうかを問い合わせます            array ("~$ ", SHELL, EXP_EXACT), // シェルにたどり着きました!    ))) {        case PASSWORD:            fwrite ($stream, "secret\n");            break;        case YESNO:            fwrite ($stream, "yes\n");            break;        case SHELL:            fwrite ($stream, "uname -a\n");            while (true) {                    switch (expect_expectl ($stream, array (                            array ("~$ ", SHELL, EXP_EXACT), // シェルにたどり着きました!                            array ("^Linux.*$", UNAME, EXP_REGEXP), // uname -a の出力                    ), $match)) {                        case UNAME:                            $uname .= $match[0];                            break;                        case SHELL:                            // アップデートの実行                            if (strstr ($uname, "x86_64")) {                                    fwrite ($stream, "rpm -Uhv http://mirrorsite/somepath/some_64bit.rpm\n%22);                            } else {                                    fwrite ($stream, "rpm -Uhv http://mirrorsite/somepath/some_32bit.rpm\n%22);                            }                            fwrite ($stream, "exit\n");                            break 2;                        case EXP_TIMEOUT:                        case EXP_EOF:                            break 2;                        default:                            die ("エラーが発生しました!\n");                    }            }            break 2;        case EXP_TIMEOUT:        case EXP_EOF:            break 2;        default:            die ("エラーが発生しました!\n");    }}fclose ($stream);?>