請注意,此函數在 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);
如您所見,這是串流複製或串流移動,取決於您正在處理的串流類型,而且因為沒有 peek(查看)函式,如果您需要在多個不相關的類別中從輸入串流讀取資料,就會遇到麻煩。