请注意,此函数实际上并没有在 Linux 系统上使用 sendfile()(至少在 PHP 7.2.12 中没有)。
(PHP 5, PHP 7, PHP 8)
stream_copy_to_stream — 将数据从一个流复制到另一个流
从 from
中当前位置(如果指定了 offset
位置,则从此位置开始)复制最多 length
字节的数据到 to
。如果 length
为 null
,则会复制 from
中所有剩余内容。
from
源流
to
目标流
length
要复制的最大字节数。默认情况下,复制所有剩余字节。
offset
开始复制数据的偏移量
返回已复制的总字节数,如果失败则返回 false
。
版本 | 描述 |
---|---|
8.0.0 |
length 现在可以为 null。 |
示例 #1 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 copied to first1k.txt\n";
echo stream_copy_to_stream($src, $dest2) . " bytes copied to remainder.txt\n";
?>
stream_copy_to_stream 几乎复制了一个流...
$objInputStream = fopen("php://input", "rb");
$objTempStream = fopen("php://temp", "w+b");
stream_copy_to_stream($objInputStream, $objTempStream);
该代码将复制一个流,但它也会将流指针移动到 EOF。如果您打算倒回临时流,这很好,但倒回输入流祝您好运。
rewind($objTempStream);
rewind($objInputStream);
因此,正如您所看到的,这取决于您正在处理的流类型,是流复制还是流移动,并且由于没有窥视函数,如果您需要在多个不相关的类中读取输入流,那么您就完蛋了。