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
): 整數 (int)|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 則註釋

1
divinity76 at gmail dot com
6 年前
請注意,此函數在 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);

如您所見,這是串流複製或串流移動,取決於您正在處理的串流類型,而且因為沒有 peek(查看)函式,如果您需要在多個不相關的類別中從輸入串流讀取資料,就會遇到麻煩。
To Top