Tema: Re: proc_open velniava
Autorius: flegmatoid
Data: 2010-02-24 11:29:19
na SSH'o atveju subeldus komanda ir spustelejus enter ("\n"), grazinamas 
output'as, kuri as esu linkes pamatyti. As taip pat esu linkes testi 
konmandu ivedima.

Gi - pavyzdyje matyti, kad ta outputa as galiu gauti tik vienu budu - 
uzdares pipe'a i kuri tas outputas paseriamas - t.y. nupjoves saka ant 
kurios sedziu.

Dar vienas klausimas prie to pacio - faktas kad procesas vis dar sukasi 
(proc_open yra elementarus fork'as) - gal kokiu nors subtiliu budu galima 
vel prisipe'inti prie jo? Tik va, $pipes[0] po uzdarymo yra NULL :\

"Justas Butkus" <butkus.justas@gmail.com> wrote in message 
news:hm1ivf$afo$1@trimpas.omnitel.net...
> 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