Espera até que a saída de um processo corresponda a um dos padrões, um período de tempo especificado tenha passado ou um EOF seja alcançado

# expect_expectl

(PECL expect >= 0.1.0)

expect_expectl — Espera até que a saída de um processo corresponda a um dos padrões, um período de tempo especificado tenha passado ou um EOF seja alcançado

### Descrição

function expect_expectl(resource `$expect`, array `$cases`, array `&$match` = ?): int

Espera até que a saída de um processo corresponda a um dos padrões, um período de tempo especificado tenha passado ou um EOF seja alcançado.

Se `match` for fornecido, então ele será preenchido com o resultado da pesquisa. A string correspondente pode ser encontrada em `match[0]`. As substrings de correspondência (de acordo com os parênteses) no padrão original podem ser encontradas em `match[1]`, `match[2]` e assim por diante, até `match[9]` (a limitação do libexpect).

### Parâmetros

`expect`
  Um fluxo Expect, previamente aberto com expect_popen().
`cases`

  Um array de casos Expect. Cada caso é um array indexado, como descrito na tabela a seguir:

  Array de Casos Expect
  Chave do Índice | Tipo do Valor | Descrição | Mandatório | Valor Padrão
  --- | --- | --- | --- | ---
  0 | string | padrão que será comparado com a saída do fluxo | sim |
  1 | mixed | valor que será retornado por esta função se o padrão for correspondido | sim |
  2 | inteiro | tipo do padrão, uma das opções: `EXP_GLOB`, `EXP_EXACT` ou `EXP_REGEXP` | não | `EXP_GLOB`

### Valor Retornado

Retorna o valor associado com o padrão que foi correspondido.

Em caso de falha, esta função retorna: `EXP_EOF`, `EXP_TIMEOUT` ou `EXP_FULLBUFFER`

### Registro de Alterações

Versão | Descrição
--- | ---
PECL expect 0.2.1 | Antes da versão 0.2.1, uma string de correspondência era retornada no parâmetro `match`, e não um array de substrings correspondidas.

### Exemplos

Exemplo #1 Exemplo de expect_expectl()

    <?php
    // Copia arquivo do servidor remoto:
    ini_set("expect.timeout", 30);

    $stream = fopen("expect://scp user@remotehost:/var/log/messages /home/user/messages.txt", "r");

    $cases = array(
        // array(padrão, valor a retornar se houver correspondência)
        array("senha:", "pediu senha"),
        array("sim/não)?",  "perguntou sim ou não")
    );

    while (true) {
        switch (expect_expectl($stream, $cases)) {
            case "pediu senha":
                fwrite($stream, "minha senha\n");
                break;
            case "perguntou sim ou não":
                fwrite($stream, "sim\n");
                break;
            case EXP_TIMEOUT:
            case EXP_EOF:
                break 2; // sai do switch e do while
            default:
                die("Ocorreu um erro!");
        }
    }

    fclose($stream);
    ?>

### Veja Também

- expect_popen() - Executa comando via Bourne shell, e abre o fluxo PTY para o processo

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open