![]() |
|
|
google unix.com
|
|||||||
| Forums | Register | Forum Rules | Links | Albums | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here. |
More UNIX and Linux Forum Topics You Might Find Helpful
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Help with expect script | somedude | Shell Programming and Scripting | 4 | 06-04-2009 01:39 PM |
| Calling expect scripts from other expect scripts | seva | Shell Programming and Scripting | 0 | 04-03-2008 02:45 PM |
| Need Help with EXPECT script | markus2008 | UNIX for Advanced & Expert Users | 5 | 03-12-2008 08:49 PM |
| Help with perl script to search webpage | Terrible | Shell Programming and Scripting | 5 | 12-01-2006 02:23 PM |
| Expect Script HELP | zuinc | Shell Programming and Scripting | 2 | 04-30-2002 10:42 AM |
![]() |
|
|
LinkBack | Thread Tools | Search this Thread | Rate Thread | Display Modes |
|
|
|
||||
|
Calling an Expect script from a Webpage using PHP
I have a webpage that is in HTML and PHP. In PHP I have tried using exec, system, shell_exec and passthru functions to call an Expect Script file (temp.exp). This Expect file spawns a telnet session that uses "expect/send" commands to retrieve information from an environmental unit (not a normal server). This data is placed in a file and then loaded to the webpage.
The problem is if I call "./temp.exp" it runs great, but when I call the same program from the webpage exec("./temp.exp") using PHP (because it retrieves the data is displayed in the webpage), it will connect but then stops responding. It never returns the password prompt to achieve a yes to move on. I inserted “exp_internal 1” in the expect file to produce the diagnostic results. When temp.exp is ran manually spawn telnet 111.111.11.111 parent: waiting for sync byte parent: telling child to go ahead parent: now unsynchronized from child spawn: returns {18790} expect: does "" (spawn_id exp5) match glob pattern "Password:"? no Trying 111.111.11.111... Connected to 111.111.11.111. Escape character is '^]'. Password: expect: does "Trying 111.111.11.111...\r\nConnected to 111.111.11.111.\r\nEscape character is '^]'.\r\nPassword: " (spawn_id exp5) match glob pattern "Password:"? yes expect: set expect_out(0,string) "Password:" expect: set expect_out(spawn_id) "exp5" When temp.exp is called from the webpage spawn telnet 111.111.11.111 parent: waiting for sync byte parent: telling child to go ahead parent: now unsynchronized from child spawn: returns {19909} expect: does "" (spawn_id exp19) match glob pattern "Password:"? no Trying 111.111.11.111... Connected to 111.111.11.111. Escape character is '^]'. expect: does "Trying 111.111.11.111...\r\nConnected to 111.111.11.111.\r\nEscape character is '^]'.\r\n" (spawn_id exp19) match glob pattern "Password:"? no expect: timed out I have checked/changed the Apache user, the permissions and ownership of the files are fine. I have put debug on the expect and the telnet sessions. I have specified the telnet used and the port. I have upgraded my Tcl/Tk. The link comp.unix.shell: Re: Calling Expect from PHP is similar but I am not getting the "setsocket(SO_DEBUG):Permission denied" error and that solution did not work for me. I have also checked the environment varibles for the webpage against command line. Command line 'env' included variables $LD_LIBRARY_PATH, $PERL5LIB, and $XAMPP_ROOT where the webpage did not. For grins and giggles, I exported these values before calling temp.exp on the webpage; it made no difference. System info # find / -name telnet /usr/bin/telnet /usr/ucb/telnet # expect -v expect version 5.40.0 Below are versions that I have tried. The script 1 #!/usr/local/bin/expect exp_internal -f /opt/xampp/htdocs/temp/diag.txt 1 spawn -nottycopy /bin/telnet -d 111.11.11.111 23 sleep 3 expect "Password:" send "OMNI\r" expect "X. Exit (end connection)" send "p\r" expect ">" log_file -noappend -a "/opt/xampp/htdocs/temp/data.txt" #Sensor Name POS3 Temp Sensor 1 send "GET 3052.5.1.1.1.1.4.3.1.1\r" sleep 3 expect "1.3.6.1.4.1.3052.5.1.1.1.1.4.3.1.1" #Read Out POS3 Temp Sensor 1 send "GET 3052.5.1.1.1.1.6.3.1.1\r" sleep 3 expect "1.3.6.1.4.1.3052.5.1.1.1.1.6.3.1.1" #Read Out POS3 Humidity Sensor 2 send "GET 3052.5.1.1.1.1.6.3.3.1\r" sleep 3 expect "1.3.6.1.4.1.3052.5.1.1.1.1.6.3.3.1" log_file send "BYE\r" exit 0 The script 2 #!/usr/local/bin/expect -f exp_internal -f /opt/xampp/htdocs/temp/diag.txt 1 set force_conservative 1 ;# set to 1 to force conservative mode even if ;# script wasn't run conservatively originally if {$force_conservative} { set send_slow {1 .1} proc send {ignore arg} { sleep .1 exp_send -s -- $arg } } set timeout 3 spawn $env(SHELL) match_max 100000 send -- "telnet 111.11.11.111\r" expect "Password: " send -- "OMNI\r" expect "X. Exit (end connection)" send -- "p\r" expect ">" log_file -noappend -a "/opt/xampp/htdocs/temp/data.txt" #Sensor Name POS3 Temp Sensor 1 send -- "GET 3052.5.1.1.1.1.4.3.1.1\r" sleep 3 expect "1.3.6.1.4.1.3052.5.1.1.1.1.4.3.1.1" #Read Out POS3 Temp Sensor 1 send -- "GET 3052.5.1.1.1.1.6.3.1.1\r" sleep 3 expect "1.3.6.1.4.1.3052.5.1.1.1.1.6.3.1.1" #Read Out POS3 Humidity Sensor 2 send -- "GET 3052.5.1.1.1.1.6.3.3.1\r" sleep 3 xpect "1.3.6.1.4.1.3052.5.1.1.1.1.6.3.3.1" log_file send -- "BYE\r" exit 0 |
![]() |
| Bookmarks |
| Thread Tools | Search this Thread |
| Display Modes | Rate This Thread |
|
|