stream_copy_to_stream
PHP Manual
PHP Manual»ストリーム 関数»stream_copy_to_stream

stream_copy_to_stream

(PHP 5, PHP 7, PHP 8)

stream_copy_to_stream — データをあるストリームから別のストリームにコピーする

説明

function stream_copy_to_stream(
    resource $from,
    resource $to,
    ?int $length = null,
    int $offset = 0
): int|false

現在の位置(offset が 0 より大きい場合は offset の位置)から最大 length バイトのデータを from から to にコピーします。もし length が null の 場合は、from にある残りすべてのデータが コピーされます。

パラメータ

from

コピー元のストリーム。

to

コピー先のストリーム。

length

コピーする最大バイト数。 デフォルトでは、残りの全てのデータがコピーされます。

offset

0 より大きい場合は、from 内でコピーを開始する位置を、ストリームの先頭から数えて指定します。 fseek() で SEEK_SET を指定したときと同じように、まず from をその位置にシークします。 0(デフォルト)または負の値の場合はシークを行わず、 from の現在の位置からコピーを開始します。

戻り値

コピーされたバイト数を返します。失敗した場合に false を返します。

変更履歴

バージョン 説明
8.0.0 length は、nullable になりました。

例

例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";

?>

注意

注意:

from がブロックモードのソケットストリームの場合、 タイムアウト時間内にデータを受信できなかった時点で、 終端に達していなくてもコピーを終了します。 このとき、それまでに読み込んだデータがすでに to に書き込まれているにもかかわらず、false が返されることがあります。 このタイムアウトは、デフォルトでは default_socket_timeout の値になり、stream_set_timeout() で変更できます。

参考

  • copy() - ファイルをコピーする

To Top