Sophie

Sophie

distrib > Mandriva > 2008.1 > i586 > by-pkgid > 703d980c580707c382b4e43e25965bc5 > files > 9177

php-manual-pt_BR-5.2.4-1mdv2008.1.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>proc_open</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REL="HOME"
TITLE="Manual do PHP"
HREF="index.html"><LINK
REL="UP"
TITLE="Programas, Funções de Execução"
HREF="ref.exec.html"><LINK
REL="PREVIOUS"
TITLE="proc_nice"
HREF="function.proc-nice.html"><LINK
REL="NEXT"
TITLE="proc_terminate"
HREF="function.proc-terminate.html"><META
HTTP-EQUIV="Content-type"
CONTENT="text/html; charset=UTF-8"></HEAD
><BODY
CLASS="refentry"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>Manual do PHP</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="function.proc-nice.html"
ACCESSKEY="P"
>Anterior</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="function.proc-terminate.html"
ACCESSKEY="N"
>Próxima</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><H1
><A
NAME="function.proc-open"
></A
>proc_open</H1
><DIV
CLASS="refnamediv"
><A
NAME="AEN184842"
></A
><P
>    (PHP 4 &#62;= 4.3.0, PHP 5)</P
>proc_open&nbsp;--&nbsp;
     Executa um comando e abre ponteiros de arquivos para entrada/saída
    </DIV
><DIV
CLASS="refsect1"
><A
NAME="AEN184845"
></A
><H2
>Descrição</H2
>resource <B
CLASS="methodname"
>proc_open</B
> ( string cmd, array descriptorspec, array pipes )<BR
></BR
><P
>&#13;     <B
CLASS="function"
>proc_open()</B
> é similar a <A
HREF="function.popen.html"
><B
CLASS="function"
>popen()</B
></A
>
     mas provê um controle muito maior sobre a execução do programa.
     <CODE
CLASS="parameter"
>cmd</CODE
> é o comando a ser executado pelo shell.
     <CODE
CLASS="parameter"
>descriptorspec</CODE
> é uma mariz indexada aonde a
     chave representa o número do descritor e o valor representa como o 
     PHP irá passar o descritor para o processo filho.
     <CODE
CLASS="parameter"
>pipes</CODE
> será definido como uma matriz de ponteiros de
     arquivos que corresponde no PHP a qualquer pipe que foi criado.
     O valor de retorno é um recurso representando o processo, você deve
     libera-lo usando <A
HREF="function.proc-close.html"
><B
CLASS="function"
>proc_close()</B
></A
> quando você tiver terminado com ela.
    </P
><P
>&#13;     <DIV
CLASS="informalexample"
><P
></P
><A
NAME="AEN184867"
></A
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br />$descriptorspec </font><font color="#007700">= array(<br />&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">0 </font><font color="#007700">=&gt; array(</font><font color="#DD0000">"pipe"</font><font color="#007700">, </font><font color="#DD0000">"r"</font><font color="#007700">),&nbsp;&nbsp;</font><font color="#FF8000">// stdin é um pipe a partir do qual o processo filho vai ler<br />&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">1 </font><font color="#007700">=&gt; array(</font><font color="#DD0000">"pipe"</font><font color="#007700">, </font><font color="#DD0000">"w"</font><font color="#007700">),&nbsp;&nbsp;</font><font color="#FF8000">// stdout é um pipe a partir do qual o processo filho vai escrever<br />&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">2 </font><font color="#007700">=&gt; array(</font><font color="#DD0000">"file"</font><font color="#007700">, </font><font color="#DD0000">"/tmp/error-output.txt"</font><font color="#007700">, </font><font color="#DD0000">"a"</font><font color="#007700">) </font><font color="#FF8000">// stderr é um arquivo que será escrito<br /></font><font color="#007700">);<br /></font><font color="#0000BB">$process </font><font color="#007700">= </font><font color="#0000BB">proc_open</font><font color="#007700">(</font><font color="#DD0000">"php"</font><font color="#007700">, </font><font color="#0000BB">$descriptorspec</font><font color="#007700">, </font><font color="#0000BB">$pipes</font><font color="#007700">);<br />if (</font><font color="#0000BB">is_resource</font><font color="#007700">(</font><font color="#0000BB">$process</font><font color="#007700">)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// $pipes parece com isso agora:<br />&nbsp;&nbsp;&nbsp;&nbsp;// 0 =&gt; manipulador de escrita conectado com o stdin do processo filho<br />&nbsp;&nbsp;&nbsp;&nbsp;// 1 =&gt; manipulador de leitura conectado com o stdout do processo filho<br />&nbsp;&nbsp;&nbsp;&nbsp;// Qualquer saída de erro será adicionada em /tmp/error-output.txt<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">fwrite</font><font color="#007700">(</font><font color="#0000BB">$pipes</font><font color="#007700">[</font><font color="#0000BB">0</font><font color="#007700">], </font><font color="#DD0000">"&lt;?php echo \"Hello World!\"; ?&gt;"</font><font color="#007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">fclose</font><font color="#007700">(</font><font color="#0000BB">$pipes</font><font color="#007700">[</font><font color="#0000BB">0</font><font color="#007700">]);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;while (!</font><font color="#0000BB">feof</font><font color="#007700">(</font><font color="#0000BB">$pipes</font><font color="#007700">[</font><font color="#0000BB">1</font><font color="#007700">])) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo </font><font color="#0000BB">fgets</font><font color="#007700">(</font><font color="#0000BB">$pipes</font><font color="#007700">[</font><font color="#0000BB">1</font><font color="#007700">], </font><font color="#0000BB">1024</font><font color="#007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">fclose</font><font color="#007700">(</font><font color="#0000BB">$pipes</font><font color="#007700">[</font><font color="#0000BB">1</font><font color="#007700">]);<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// É importante que você feche qualquer pipe antes de usar<br />&nbsp;&nbsp;&nbsp;&nbsp;// proc_close para evitar um travamento<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$return_value </font><font color="#007700">= </font><font color="#0000BB">proc_close</font><font color="#007700">(</font><font color="#0000BB">$process</font><font color="#007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;echo </font><font color="#DD0000">"command returned $return_value</font><font color="#007700">\n</font><font color="#DD0000">"</font><font color="#007700">;<br />}<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
><P
></P
></DIV
>
    </P
><P
>&#13;     O PHP 5RC2 introduz suporte pty para sistemas com Unix98 ptys. Isto permite ao
     seu script interagir com aplicações que esperão estar conversando com um terminal.
     Um pty funciona como um pipe, mas é bi-direcional, então não é
     necessário especificar um modo de leitura/escrita. O exemplo abaixo mostra como usar um pty;
     note que você não precisa ter todos os descritores conversando com um pty.
     Note também que apenas um pty é criado, mesmo que o pty seja especificado 3
     vezes. Em versões futuras do PHP, será possível fazer mais do que apenas
     ler e escrever para o pty.
    </P
><P
>&#13;     <DIV
CLASS="informalexample"
><P
></P
><A
NAME="AEN184871"
></A
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br /></font><font color="#FF8000">// Cria um pseudo terminal para o processo filho<br /></font><font color="#0000BB">$descriptorspec </font><font color="#007700">= array(<br />&nbsp;&nbsp;</font><font color="#0000BB">0 </font><font color="#007700">=&gt; array(</font><font color="#DD0000">"pty"</font><font color="#007700">),<br />&nbsp;&nbsp;</font><font color="#0000BB">1 </font><font color="#007700">=&gt; array(</font><font color="#DD0000">"pty"</font><font color="#007700">),<br />&nbsp;&nbsp;</font><font color="#0000BB">2 </font><font color="#007700">=&gt; array(</font><font color="#DD0000">"pty"</font><font color="#007700">)<br />);<br /></font><font color="#0000BB">$process </font><font color="#007700">= </font><font color="#0000BB">proc_open</font><font color="#007700">(</font><font color="#DD0000">"cvs -d:pserver:cvsread@cvs.php.net:/repository login"</font><font color="#007700">, </font><font color="#0000BB">$descriptorspec</font><font color="#007700">, </font><font color="#0000BB">$pipes</font><font color="#007700">);<br />if (</font><font color="#0000BB">is_resource</font><font color="#007700">(</font><font color="#0000BB">$process</font><font color="#007700">)) {<br />&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// work with it here<br /></font><font color="#007700">}<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
><P
></P
></DIV
>
    </P
><P
>&#13;     Os números de descritores em <CODE
CLASS="parameter"
>descriptorspec</CODE
>
     não saõ limitados a 0, 1 e 2 - você pode especificar qualquer número de descritor
     de arquivo válido e será passado para o processo filho. Isto permite ao seu script
     interagir com outros scripts que funcionam como "co-processos".
     Em particular, isto é útil para passar senhas para programas como
     PGP, GPG e openssl de uma maneira mais segura. É útil também para ler a
     informação de status provida por estes programas
     nos descritores de arquivos auxiliares.
    </P
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>Nota: </B
>
      Compatibilidade com o Windows: Descritores além do  2 (stderr) são
      disponibilizados para o Windows, mas desde que a arquitetura Windows
      não associa descritores de arquivos com os manipuladores de baixo nível,
      o processo filho não tem (ainda) meios de acessar estes manipuladores.
      Stdin, stdout e stderr funcionam como esperado.
     </P
></BLOCKQUOTE
></DIV
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>Nota: </B
>
      Se você precisa de um pipe de processo uni-direcional, use a função
      <A
HREF="function.popen.html"
><B
CLASS="function"
>popen()</B
></A
> ao invés, já que ela é muito mais fácil de usar.
     </P
></BLOCKQUOTE
></DIV
><P
>&#13;     Veja também <A
HREF="function.stream-select.html"
><B
CLASS="function"
>stream_select()</B
></A
>, <A
HREF="function.exec.html"
><B
CLASS="function"
>exec()</B
></A
>,
     <A
HREF="function.system.html"
><B
CLASS="function"
>system()</B
></A
>,
     <A
HREF="function.passthru.html"
><B
CLASS="function"
>passthru()</B
></A
>, <A
HREF="function.popen.html"
><B
CLASS="function"
>popen()</B
></A
>,
     <A
HREF="function.escapeshellcmd.html"
><B
CLASS="function"
>escapeshellcmd()</B
></A
>, e o operador <A
HREF="language.operators.execution.html"
>backtick</A
>.
    </P
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="function.proc-nice.html"
ACCESSKEY="P"
>Anterior</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="index.html"
ACCESSKEY="H"
>Principal</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="function.proc-terminate.html"
ACCESSKEY="N"
>Próxima</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>proc_nice</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="ref.exec.html"
ACCESSKEY="U"
>Acima</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>proc_terminate</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>