Tema: Re: proc_open velniava
Autorius: Justas Butkus
Data: 2010-02-23 23:57:03
Kol 0 (ar, pvz. SSH atveju tai gal būtų 3) kanalas neuždarytas - 
programa laukia ir nieko nevykdo.
Tai ko galima, tokiu atveju, tikėtis iš jos grįžtant?

 > rašome
- uždarome STDIN
< skaitome iš STDOUT / STDERR ...
- įvertiname duomenis
- jei reikia - vėl atidarome STDIN
 > rašome dar ką nors


--
JB

2010.02.23 22:48, flegmatoid rašė:
> sveiki - reikia bi-directional rysio tarp konkretaus proceso (pvz ssh, ftp, mysql) ir php dalies, tam, kad suserti eile komandu, po kiekvienos nuskaitant konsoles output'a.
>
> Kas idomiausia - viskas kaip ir veikia, taciau stdout'a gaunu tik uzdares stdin'a (pipe[0]) :\ - gugleje rodo keleta panasiu klausimu - tik, deja, be atsakymu.
>
> bandau suvokti - kokia tuomet proc_open funkcijos prasme?
>
>   <?php
> $descriptorspec = array(
>     0 =>  array("pipe", "r"),
>     1 =>  array("pipe", "w"),
>     2 =>  array("pipe", "r")
> );
>
> $process = proc_open('mysql -u root', $descriptorspec, $pipes);
>
> if (is_resource($process)) {
>      //stream_set_blocking($pipes[0],0);
>      //stream_set_blocking($pipes[1],0);
>
>      fwrite($pipes[0], "show databases;\n");
>      sleep(1);
>      //fclose($pipes[0]);  - veikia tik atkomentavus sia eilute.
>      $rez=stream_get_contents($pipes[1]);
>      echo "[$rez]";
>      //fclose($pipes[1]);
>      proc_close($process);
> }
> ?>
>
> isbandyta ir po fbsd ir po windoze.
> php 5.2.12 ir 5.3.0
>
> dekui uz mintis