PHP Conference Japan 2024

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 位置,则从此位置开始)复制最多 length 字节的数据到 to。如果 lengthnull,则会复制 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";

?>

参见

添加注释

用户贡献的注释 2 条注释

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