Respuesta HTTP (PSR-7)

Resumen
Phalcon\Http\Message\Stream es una implementación del interfaz de mensajería HTTP PSR-7 definido por PHP-FIG.

Esta clase describe un flujo de datos. Normalmente, una instancia envuelve un flujo PHP, este interfaz provee una envoltura sobre la mayoría de operaciones comunes, incluyendo la serialización de todo el flujo a una cadena.
<?php
use Phalcon\Http\Message\Stream;
$fileName = dataDir('assets/stream/mit.txt');
$stream = new Stream($fileName, 'rb');
echo $stream->getContents(); // 'The MIT License (MIT) ...'
Constructor
public function __construct(
mixed $stream,
string $mode = "rb"
)
El primer parámetro puede ser una cadena que indique la ubicación del archivo en el sistema de ficheros o área de almacenamiento. También puede ser un recurso, como el devuelto por un método como fopen. El segundo parámetro es el modo de apertura del flujo. El modo por defecto es rb
. Para una lista de modos disponibles, se puede consultar la documentación de fopen.
stream
- cadena o recurso
mode
- Cadena que indica el modo en el que el archivo es abierto.
Si hay un error, se lanzará un RuntimeException
.
Getters
__toString()
Lee todos los datos del flujo en un cadena, de principio a fin. El método intentará primero seek()
al principio del flujo antes de leer los datos y leer el flujo hasta que se alcance el final.
NOTA Llamar a este método en archivos grandes provocará que una gran cantidad de datos se carguen en memoria
<?php
use Phalcon\Http\Message\Stream;
$fileName = dataDir('assets/stream/mit.txt');
$stream = new Stream($fileName, 'rb');
echo (string) $stream; // 'The MIT License (MIT) ...'
getContents()
Devuelve una cadena con el contenido restante. Si el flujo no se puede leer o ocurre algún error, se lanzará RuntimeException
.
<?php
use Phalcon\Http\Message\Stream;
$fileName = dataDir('assets/stream/mit.txt');
$stream = new Stream($fileName, 'rb');
echo $stream->getContents(); // 'The MIT License (MIT) ...'
Devuelve los metadatos del flujo como un vector asociativo. Si el parámetro $key
se define, se devolverá la cadena del elemento relevante. El método es una envoltura de la función PHP stream_get_meta_data(). Si no se encuentra la clave, el método devolverá null
.
<?php
use Phalcon\Http\Message\Stream;
$fileName = dataDir('assets/stream/mit.txt');
$stream = new Stream($fileName, 'rb');
var_dump(
$stream->getMetadata()
);
// [
// 'timed_out' => false,
// 'blocked' => true,
// 'eof' => false,
// 'wrapper_type' => 'plainfile',
// 'stream_type' => 'STDIO',
// 'mode' => 'rb',
// 'unread_bytes' => 0,
// 'seekable' => true,
// 'uri' => $fileName,
// ];
echo $stream->getMetadata('wrapper_type'); // 'plainfile'
echo $stream->getMetadata('unknown'); // null
getSize()
Devuelve el tamaño del flujo. Si no se conoce, se devolverá null
<?php
use Phalcon\Http\Message\Stream;
$fileName = dataDir('assets/stream/mit.txt');
$stream = new Stream($fileName, 'rb');
echo $stream->getSize(); // 1087
Is
isSeekable()
Devuelve true
si el flujo es consultable, false
en caso contrario.
<?php
use Phalcon\Http\Message\Stream;
$fileName = dataDir('assets/stream/mit.txt');
$stream = new Stream($fileName, 'rb');
echo $stream->isSeekable(); // 'true'
isReadable()
Devuelve true
si el flujo es legible, false
en caso contrario.
<?php
use Phalcon\Http\Message\Stream;
$fileName = dataDir('assets/stream/mit.txt');
$stream = new Stream($fileName, 'w');
echo $stream->isReadable(); // 'false'
isWritable()
Devuelve true
si el flujo es escribible, false
en caso contrario.
<?php
use Phalcon\Http\Message\Stream;
$fileName = dataDir('assets/stream/mit.txt');
$stream = new Stream($fileName, 'rb');
echo $stream->isWritable(); // 'false'
close()
Cierra el flujo y cualquier recurso subyacente.
<?php
use Phalcon\Http\Message\Stream;
$fileName = dataDir('assets/stream/mit.txt');
$stream = new Stream($fileName, 'rb');
$stream->close();
detach()
Separa cualquier recurso subyacente del flujo. Después de que el flujo haya sido desvinculado, el flujo queda en un estado inutilizable. Llamar a este método en un flujo cerrado/desvinculado devolverá null
<?php
use Phalcon\Http\Message\Stream;
$fileName = dataDir('assets/stream/mit.txt');
$stream = new Stream($fileName, 'rb');
echo $stream->detach(); // The handle
echo $stream->detach(); // null
eof()
Devuelve true
si flujo está al final del flujo, false
en caso contrario.
<?php
use Phalcon\Http\Message\Stream;
$fileName = dataDir('assets/stream/mit.txt');
$stream = new Stream($fileName, 'rb');
echo $stream->eof(); // false
$stream->seek(9999);
echo $stream->eof(); // true
read()
Lee datos desde el flujo. El método acepta un entero que indique el número de bytes del objeto y los devuelva. El método podría devolver un número menor de bytes que el especificado si se alcanza el final del flujo. Si no hay más datos disponibles se devolverá una cadena vacía. Si ocurre algún error, se lanzará RuntimeException
.
<?php
use Phalcon\Http\Message\Stream;
$fileName = dataDir('assets/stream/mit.txt');
$stream = new Stream($fileName, 'rb');
echo $stream->read(15); // 'The MIT License'
rewind()
Busca el principio del flujo. Usa internamente fseek() llamando seek(0)
. Si el flujo no es consultable, se lanzará RuntimeException
.
<?php
use Phalcon\Http\Message\Stream;
$fileName = dataDir('assets/stream/mit.txt');
$stream = new Stream($fileName, 'rb');
$stream->seek(8);
echo $stream->read(7); // 'License'
$stream->rewind();
echo $stream->read(3); // 'The'
seek()
Intenta colocarse en una posición del flujo. Usa internamente fseek(). Acepta:
offset
- int
Desplazamiento sobre el flujo
whence
- int
Especifica como se calculará la posición del cursor teniendo en cuenta el desplazamiento buscado. Los valores correctos son idénticos a los que vienen de serie en PHP como valores de $whence para fseek().
SEEK_SET
Establece la posición igual a los bytes de desplazamiento
SEEK_CUR
Establece la posición en la ubicación actual más el desplazamiento
SEEK_END
Establece la posición al final del flujo más el desplazamiento.
Si ocurre algún error, se lanzará RuntimeException
.
<?php
use Phalcon\Http\Message\Stream;
$fileName = dataDir('assets/stream/mit.txt');
$stream = new Stream($fileName, 'rb');
$stream->seek(8);
echo $stream->read(7); // 'License'
$stream->rewind();
echo $stream->read(3); // 'The'
tell()
Devuelve la posición actual del puntero de lectura/escritura como entero. Si ocurre algún error, se lanzará RuntimeException
.
<?php
use Phalcon\Http\Message\Stream;
$fileName = dataDir('assets/stream/mit.txt');
$stream = new Stream($fileName, 'rb');
$stream->seek(8);
echo $stream->tell(); // 8
write()
Escribe datos al flujo. Acepta un parámetro cadena
como contenido a ser escrito. El método devuelve el número de bytes escritos al flujo como entero. Si ocurre algún error, se lanzará RuntimeException
.
<?php
use Phalcon\Http\Message\Stream;
$stream = new Stream('php://memory', 'wb');
$source = 'The above copyright notice and this permission '
. 'notice shall be included in all copies or '
. 'substantial portions of the Software.';
echo $stream->write($source); // 126