note 27996 added to function.proc-open

From: Date: Sat, 28 Dec 2002 23:54:58 +0000
Subject: note 27996 added to function.proc-open
Groups: php.notes 
Request: Send a blank email to php-notes+get-41402@lists.php.net to get a copy of this message
I worked with proc_open for a while before realizing how it works with applications in real time. This example loads up the eDonkey2000 client and reads data from it and passes in various commands and returns the results. This is the base for an ncurses gui for edonkey I am writing in PHP. <? define ("DASHES", "-------------------------------------------------\n"); function readit($pipes, $len=2, $end="> "){ stream_set_blocking($pipes[1], FALSE); while($ret = fread($pipes[1],$len)){ $retval .= $ret; if(substr_count($ret, $end) > 0){ $pipes[1] = "" ; break;} } return $retval; }//end fucntion function sendto($pipes, $str){ fwrite($pipes[0], $str."\n"); }//end function function viewopts($pipes, $opt){ sleep(1); sendto($pipes, $opt); return readit($pipes); }//end function function sendopts($pipes, $opt){ sendto($pipes, $opt); usleep(50); return readit($pipes); }//end function $dspec = array( 0 => array("pipe", "r"), 1 => array("pipe", "w"), 2 => array("file", "/tmp/eo.txt", "a"),); $process = proc_open("donkey", $dspec, $pipes); if (is_resource($process)) { readit($pipes); echo DASHES; echo viewopts($pipes, "vo"); echo DASHES; echo SEP;echo DASHES; echo sendopts($pipes, "name test".rand(5,5000)); echo DASHES; echo SEP; echo DASHES; echo viewopts($pipes, "vo"); echo DASHES; echo SEP; echo DASHES; echo sendopts($pipes, "temp /tmp"); echo DASHES; echo SEP; echo DASHES; echo viewopts($pipes, "g"); echo DASHES; sendto($pipes, "q"); sendto($pipes, "y"); readit($pipes); fclose($pipes[0]); fclose($pipes[1]); $return_value = proc_close($process); } ?> returns what looks like the following ----------------------------------------------------------------- Name: test2555 AdminName: admin AdminPass: password AdminPort: 79 Max Download Speed: 0.00 Max Upload Speed: 0.00 Line Speed Down: 0.00 Door Port: 4662 AutoConnect: 1 Verbose: 0 SaveCorrupted: 1 AutoServerRemove: 1 MaxConnections: 45 > ---------------------------------------------------------------- -- http://www.php.net/manual/en/function.proc-open.php http://master.php.net/manage/user-notes.php?action=edit+27996 http://master.php.net/manage/user-notes.php?action=delete+27996 http://master.php.net/manage/user-notes.php?action=reject+27996

« previous php.notes (#41402) next »