# expect_expectl

(PECL expect >= 0.1.0)

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

### Description

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

Attend jusqu'à ce que la sortie d'un processus corresponde à un des motifs, un 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 :

  Expect Case Array
  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 sera 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(masque, valeur à retourner si le masque 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