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.
fromEl flujo de origen
toEl flujo de destino
lengthNúmero máximo de bytes a copiar. Por omisión, se copian todos los bytes restantes.
offsetEl desplazamiento donde comenzar la copia de datos
Devuelve el número total de bytes copiados, o false si ocurre un 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.