note that this function does not actually use sendfile() on linux systems (at least not in PHP 7.2.12)
(PHP 5, PHP 7, PHP 8)
stream_copy_to_stream — Copia datos desde un flujo hacia otro
$from
,$to
,$length
= null
,$offset
= 0
Realiza una copia de hasta length
bytes de datos desde la posición actual del puntero (o desde la posición offset
, si se especifica) en el flujo from
hacia el parámetro to
. Si length
no está especificado, se copiará todo el resto del flujo from
.
from
El flujo de origen
to
El flujo de destino
length
Número máximo de bytes a copiar. Por omisión, se copian todos los bytes restantes.
offset
El desplazamiento donde comenzar la copia de datos
Devuelve el número total de bytes copiados, o false
en caso de error.
Versión | Descripción |
---|---|
8.0.0 |
length ahora es nullable.
|
Ejemplo #1 Ejemplo con stream_copy_to_stream()
<?php
$src = fopen('http://www.example.com', 'r');
$dest1 = fopen('first1k.txt', 'w');
$dest2 = fopen('remainder.txt', 'w');
echo stream_copy_to_stream($src, $dest1, 1024) . " bytes copiados a first1k.txt\n";
echo stream_copy_to_stream($src, $dest2) . " bytes copiados a remainder.txt\n";
?>
note that this function does not actually use sendfile() on linux systems (at least not in PHP 7.2.12)
stream_copy_to_stream almost copies a stream...
$objInputStream = fopen("php://input", "rb");
$objTempStream = fopen("php://temp", "w+b");
stream_copy_to_stream($objInputStream, $objTempStream);
That code will copy a stream but it will also move the stream pointers to EOF. This is fine if you plan on rewinding the temp stream but good luck rewinding the input stream.
rewind($objTempStream);
rewind($objInputStream);
So as you can see this is stream copy or stream move depending on what kind of stream you are working with, and because there are no peaking functions your effed if you need to read from an input stream in multiple classes that are unrelated.