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 información desde un flujo a otro
Hace una copia de hasta maxlength
bytes
de información desde la posición actual (o desde la posición de
offset
, si se especifica) desde
source
a dest
. Si
no se especifica maxlength
, todo el contenido restante de
source
será copiado.
source
El flujo de origen
dest
El flujo de destino
maxlength
Máximos bytes a copiar
offset
El índice donde comenzar a copiar información
Devuelve el número total de bytes copiados, o false
en caso de error.
Versión | Descripción |
---|---|
5.1.0 |
Se añadió el parámetro offset
|
Ejemplo #1 Un ejemplo de stream_copy_to_stream()
<?php
$origen = fopen('http://www.example.com', 'r');
$destino1 = fopen('primer1k.txt', 'w');
$destino2 = fopen('resto.txt', 'w');
echo stream_copy_to_stream($origen, $destino1, 1024) . " bytes copiados a primer1k.txt\n";
echo stream_copy_to_stream($origen, $destino2) . " bytes copiados a resto.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.