stream_copy_to_stream

(PHP 5, PHP 7, PHP 8)

stream_copy_to_stream将数据从一个流复制到另一个流

说明

stream_copy_to_stream(
    资源 $from,
    资源 $to,
    ?整数 $length = null,
    整数 $offset = 0
): 整数|false

from 中的当前位置(或指定了 offset 位置时,从 offset 位置开始)复制最多 length 个字节的数据到 to。如果 lengthnull,则将复制 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";

?>

参见

添加注释

用户贡献的注释 2 个注释

1
divinity76 at gmail dot com
5 年前
请注意,此函数在 Linux 系统上实际上并没有使用 sendfile()(至少在 PHP 7.2.12 中没有)。
1
none at noone dot com
17 年前
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);

因此,正如您所看到的,这取决于您正在处理的流类型,可以是流复制,也可以是流移动,并且由于没有窥视函数,因此如果您需要在多个不相关的类中读取输入流,您就完蛋了。
To Top