请注意,此函数在 Linux 系统上实际上并没有使用 sendfile()(至少在 PHP 7.2.12 中没有)。
(PHP 5, PHP 7, PHP 8)
stream_copy_to_stream — 将数据从一个流复制到另一个流
从 from
中的当前位置(或指定了 offset
位置时,从 offset
位置开始)复制最多 length
个字节的数据到 to
。如果 length
为 null
,则将复制 from
中所有剩余内容。
from
源流
to
目标流
length
要复制的最大字节数。默认情况下,将复制所有剩余字节。
offset
开始复制数据的偏移量
返回复制的总字节数,或在失败时返回 false
。
版本 | 说明 |
---|---|
8.0.0 |
length 现在可以为空。 |
范例 #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) . " 字节复制到 first1k.txt\n";
echo stream_copy_to_stream($src, $dest2) . " 字节复制到 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);
因此,正如您所看到的,这取决于您正在处理的流类型,可以是流复制,也可以是流移动,并且由于没有窥视函数,因此如果您需要在多个不相关的类中读取输入流,您就完蛋了。