(PHP 4, PHP 5, PHP 7, PHP 8)
popen — Crea un puntero de archivo de proceso
Crea un puntero de archivo de proceso, ejecutado mediante un fork
de la orden proporcionada por el argumento command
.
command
La orden
mode
El modo. Puede ser 'r'
para lectura, o 'w'
para escritura.
En Windows, popen() utiliza el modo texto por defecto,
es decir, todo carácter \n
escrito o leído del pipe será
traducido a \r\n
.
Si esto no es deseado, el modo binario puede ser forzado definiendo
el mode
a 'rb'
y
'wb'
, respectivamente.
Devuelve un puntero de archivo idéntico al devuelto por fopen(), excepto que será unidireccional (solo lectura, o solo escritura), y debe ser cerrado mediante pclose(). Este puntero puede ser utilizado con fgets(), fgetss() y fwrite(). Cuando el modo es 'r', el puntero de archivo devuelto equivale al STDOUT de la orden, y cuando el modo es 'w', el puntero de archivo devuelto equivale al STDIN de la orden.
Si ocurre un error, la función devolverá false
.
Ejemplo #1 Ejemplo con popen()
<?php
$handle = popen("/bin/ls", "r");
?>
Si la orden a ejecutar no ha podido ser encontrada, se devolverá un recurso válido. Esto puede parecer extraño, pero es práctico. Esto permite acceder a los mensajes de error que han sido devueltos por el Shell:
Ejemplo #2 Ejemplo con popen()
<?php
error_reporting(E_ALL);
/* Añade una redirección para que pueda leer stderr. */
$handle = popen('/path/to/executable 2>&1', 'r');
echo "'$handle'; " . gettype($handle) . "\n";
$read = fread($handle, 2096);
echo $read;
pclose($handle);
?>
Nota:
Si se desea un soporte bidireccional (two-way), utilice la función proc_open().