Attend jusqu'à ce que la sortie d'un processus corresponde à un des motifs, une période de temps spécifique est passée ou un EOF est vu

# expect_expectl

(PECL expect >= 0.1.0)

expect_expectl — Attend jusqu'à ce que la sortie d'un processus corresponde à un des motifs, une période de temps spécifique est passée ou un EOF est vu

### Description

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

Attend jusqu'à ce que la sortie d'un processus corresponde à un des motifs, une période de temps spécifique est passée ou un EOF est vu.

Si le paramètre `match` est fourni, alors il est rempli avec le résultat de la recherche. La chaîne de caractères de recherche peut être trouvée dans `match[0]`. Les sous-chaînes de recherche (selon les parenthèses) dans le motif original peuvent être trouvées dans `match[1]`, `match[2]` et ainsi de suite jusqu'à `match[9]` (limité par libexpect).

### Liste de paramètres

`expect`
  Un flux de données Expect, ouvert précédemment avec expect_popen().
`cases`

  Un tableau des cas expect. Chaque cas expect est un tableau indexé, comme décrit dans la table suivante :

  Tableau des cas Expect
  Clé Index | Type Valeur | Description | Est Obligatoire | Valeur par Défaut
  --- | --- | --- | --- | ---
  0 | string | motif, qui sera vérifié avec la sortie du flux | oui |
  1 | mixed | valeur, qui est retournée par cette fonction, si le motif concorde | oui |
  2 | integer | type de motif, un de : `EXP_GLOB`, `EXP_EXACT` ou `EXP_REGEXP` | non | `EXP_GLOB`

### Valeurs de retour

Retourne une valeur associée avec le motif qui correspond.

En cas d'échec, cette fonction retourne : `EXP_EOF`, `EXP_TIMEOUT` ou `EXP_FULLBUFFER`

### Historique

Version | Description
--- | ---
PECL expect 0.2.1 | Avant la version 0.2.1, dans le paramètre `match`, un résultat en chaîne de caractères était retourné et non un tableau de sous-chaînes de résultat.

### Exemples

Exemple #1 Exemple avec expect_expectl()

    <?php
    // Copie le fichier à partir de l'hôte distant :
    ini_set("expect.timeout", 30);

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

    $cases = array(
        // array(motif, valeur à retourner si le motif correspond)
        array("password:", "asked for password"),
        array("yes/no)?",  "asked for yes/no")
    );

    while (true) {
        switch (expect_expectl($stream, $cases)) {
            case "asked for password":
                fwrite($stream, "my password\n");
                break;
            case "asked for yes/no":
                fwrite($stream, "yes\n");
                break;
            case EXP_TIMEOUT:
            case EXP_EOF:
                break 2; // interrompt à la fois la structure switch et la boucle while
            default:
                die("Une erreur est survenue !");
        }
    }

    fclose($stream);
    ?>

### Voir aussi

- expect_popen() - Exécute une commande via le shell Bourne, et ouvre le flux PTY au processus

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