This extension allows to interact with processes through PTY. You may consider using the expect:// wrapper with the filesystem functions which provide a simpler and more intuitive interface.
This module uses the functions of the » expect library. You need libexpect version >= 5.43.0.
Toto » PECL rozšírenie nie je pribalené s PHP. Dodatočné informácie ako sú nové vydania, downloady, zdrojové súbory, informácie od spracovávateľa, a CHANGELOG, je možné nájsť tu: » http://pecl.php.net/package/expect.
V PHP 4 je možné zdrojový kód tohto PECL rozšírenia nájsť v adresári ext/ v zdrojovom kóde PHP alebo na PECL odkaze uvedenom vyššie. In order to use these functions you must compile PHP with expect support by using the --with-expect[=DIR] configure option.
Windows users will enable php_expect.dll inside of php.ini in order to use these functions. V PHP 4 sa toto DLL nachádza v adresári extensions/ v downloade PHP Windows binariek. Toto PECL rozšírenie DLL si môžete stiahnúť zo stránky » PHP Download alebo na » http://snaps.php.net/.
Správanie tejto funkcie je ovplyvnené nastaveniami v php.ini.
In order to configure expect extension, there are configuration options in the configuration file php.ini.
Názov | Východzí | Zamenitelný | Changelog |
---|---|---|---|
expect.timeout | "10" | PHP_INI_ALL | |
expect.loguser | "1" | PHP_INI_ALL | |
expect.logfile | "" | PHP_INI_ALL |
Tu je krátke vysvetlenie konfiguračných direktív.
The timeout period for waiting for the data, when using the expect_expectl() function.
A value of "-1" disables a timeout from occurring.
Note: A value of "0" causes the expect_expectl() function to return immediately.
Whether expect should send any output from the spawned process to stdout. Since interactive programs typically echo their input, this usually suffices to show both sides of the conversation.
Name of the file, where the output from the spawned process will be written. If this file doesn't exist, it will be created.
Note: If this configuration is not empty, the output is written regardless of the value of expect.loguser.
expect_popen() returns an open PTY stream used by expect_expectl().
Konštanty uvedené nižšie sú definované týmto rozšírením a budú dostupné iba keď rozšírenie bolo buď kompilované do PHP alebo dynamicky načítané za behu (runtime).
This example connects to the remote host via SSH, and prints the remote uptime.
Example#1 Expect Usage Example
<?php
ini_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 ("Error was occurred while connecting to the remote host!\n");
}
while ($line = fgets ($stream)) {
print $line;
}
fclose ($stream);
?>
The following example connects to the remote host, determines whether installed OS is for 32 or 64 bit, then runs update for specific package.
Example#2 Another Expect Usage Example
<?php
ini_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 is asking for password
array ("yes/no)?", YESNO), // SSH is asking whether to store the host entry
array ("~$ ", SHELL, EXP_EXACT), // We've got the shell!
))) {
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), // We've got the shell!
array ("^Linux.*$", UNAME, EXP_REGEXP), // uname -a output
), $match)) {
case UNAME:
$uname .= $match[0];
break;
case SHELL:
// Run update:
if (strstr ($uname, "x86_64")) {
fwrite ($stream, "rpm -Uhv http://mirrorsite/somepath/some_64bit.rpm\n");
} else {
fwrite ($stream, "rpm -Uhv http://mirrorsite/somepath/some_32bit.rpm\n");
}
fwrite ($stream, "exit\n");
break 2;
case EXP_TIMEOUT:
case EXP_EOF:
break 2;
default:
die ("Error has occurred!\n");
}
}
break 2;
case EXP_TIMEOUT:
case EXP_EOF:
break 2;
default:
die ("Error has occurred!\n");
}
}
fclose ($stream);
?>