Una matriz indexada en donde las llaves representan el
número del descriptor y el valor representa el modo en
que PHP pasará el descriptor al proceso hijo. 0 es
stdin, 1 es stdout, y 2 es stderr.
Los únicos tipos de pipe soportados son
file, pipe y
pty.
Recibirá como valor una matriz indexada de apuntadores
de archivo que corresponden a los valores en PHP de los pipes
creados.
cwd
El directorio de trabajo inicial para el comando. Este debe ser
una ruta de directorio absoluta, o NULL si desea usar el
valor predeterminado (el directorio de trabajo del proceso PHP
actual)
env
Una matriz con las variables de entorno para el comando que
será ejecutado, o NULL para usar el mismo entorno que
el proceso PHP actual
otras_opciones
Le permite especificar opciones adicionales. En la actualidad
solo se reconoce suppress_errors,
opción que elimina los errores generados por esta
función cuando su valor es TRUE
Valores retornados
Devuelve un recurso que representa el proceso, el cual debe ser
liberado usando proc_close() cuando haya
terminado de usarlo. En caso de error, devuelve FALSE.
Registro de cambios
Versión
Descripción
5.0.0.
Se añadieron los parámetros
cwd, env y
otras_opciones. Se agregó
soporte para ptys Unix98.
Ejemplos
Ejemplo 1. Un ejemplo de proc_open()
<?php $espec_descriptor = array( 0 => array("pipe", "r"), // stdin es un pipe usado por el hijo para lectura 1 => array("pipe", "w"), // stdout es un pipe usado por el hijo para escritura 2 => array("file", "/tmp/error-output.txt", "a") // stderr es un archivo para escritura );
if (is_resource($proceso)) { // $pipes ahora luce de esta forma: // 0 => gestor de escritura conectado con la entrada estandar del hijo // 1 => gestor de lectura conectado con la salida estandar del hijo // Cualquier mensaje de salida de error sera adicionado a /tmp/error-output.txt
// Es importante que cierre todos los pipes antes de llamar // proc_close para evitar un bloqueo muerto $retval = proc_close($proceso);
echo "el comando ha devuelto $retval\n"; } ?>
El resultado del ejemplo seria algo
similar a:
Array
(
[some_option] => aeiou
[PWD] => /tmp
[SHLVL] => 1
[_] => /usr/local/bin/php
)
el comando ha devuelto 0
Ejemplo 2. Uso de ptys
<?php // Crear una pseudo terminal para el proceso hijo $espec_descriptor = array( 0 => array("pty"), 1 => array("pty"), 2 => array("pty") ); $proceso = proc_open("cvs -d:pserver:cvsread@cvs.php.net:/repository login", $espec_descriptor, $pipes); if (is_resource($proceso)) { // trabaje con el recurso aqui } ?>
Notes
Nota:
Compatibilidad con Windows: Los descriptores más
allá de 2 (stderr) se ponen a disposición del
proceso hijo como gestores heredables, pero ya que la arquitectura
de Windows no asocia números de descriptores de archivo con
gestores de bajo nivel, el proceso hijo no tiene (aun) una forma
de acceder a esos gestores. Stdin, stdout y stderr funcionan como
es de esperarse.
Nota:
Si solo necesita un pipe de proceso uni-direccional (de una
vÃa), use popen() en su lugar, ya que es
mucho más fácil de usar.
Atención técnica y comercial: (54)-11-5031-1111 las 24 hs. los 365 días del año. ToWebs, (c) 2008
Virtucom Networks S.A Av. Belgrano 1586, piso 10 (C1093AAQ) Cap. Fed. Bs. As, Argentina.