【PHP8.x】stream_copy_to_stream関数の使い方

作成日: 更新日:

stream_copy_to_stream関数は、入力ストリームから出力ストリームへデータを効率的にコピーする関数です。PHPにおけるストリームとは、ファイルやネットワークソケット、あるいは圧縮されたデータなど、連続したデータの流れを扱うための抽象的な仕組みを指します。この関数は、これらのストリーム間で、ある場所から別の場所へデータを直接転送するために使用されます。

この関数の大きな利点は、特に大きなファイルを扱う際に、全てのデータを一度にメモリに読み込むことなく処理できる点です。これにより、メモリの使用量を抑え、システムリソースを効率的に利用しながら、高速なデータ転送を実現します。例えば、ウェブサイトにアップロードされた大きなファイルをサーバー上の別の場所に保存する場合や、リモートのデータソースから情報を取得してローカルに書き出す場合などに大変役立ちます。

関数は、コピー元のストリームとコピー先のストリームを必須の引数として受け取ります。さらに、オプションでコピーするデータの最大バイト数を指定する $maxlength や、コピー元ストリームのどの位置から読み込みを開始するかを指定する $offset を設定することも可能です。

処理が成功した場合、この関数は実際にコピーされたバイト数を整数値として返します。もし何らかのエラーが発生してコピーに失敗した場合は false を返します。システムエンジニアを目指す初心者の方にとって、ファイル操作やネットワーク通信におけるデータ転送の効率化を図る上で、非常に強力で基本的なツールの一つとなります。

基本的な使い方

構文(syntax)

<?php
// コピー元のストリームリソースを作成し、データを書き込む
$source = fopen('php://memory', 'r+');
fwrite($source, 'This is some data to be copied from source to destination.');
fseek($source, 0); // ポインタをストリームの先頭に戻す

// コピー先のストリームリソースを作成
$destination = fopen('php://temp', 'w+');

// stream_copy_to_stream 関数の構文:
// stream_copy_to_stream(resource $source, resource $destination, int $max_length = -1, int $offset = 0): int|false
// 
// $source: コピー元のストリームリソース
// $destination: コピー先のストリームリソース
// $max_length (オプション): コピーする最大バイト数。-1はストリームの終端まですべてをコピー
// $offset (オプション): コピー元のストリームの開始オフセット(バイト単位)
$copiedBytes = stream_copy_to_stream($source, $destination, -1, 0);

// ストリームリソースを閉じる
fclose($source);
fclose($destination);

引数(parameters)

resource $from, resource $to, ?int $length = null, int $offset = -1

  • resource $from: コピー元のストリームリソース
  • resource $to: コピー先のストリームリソース
  • ?int $length = null: コピーするバイト数。nullの場合はストリームの終端までコピーします。
  • int $offset = -1: コピーを開始するオフセット位置。-1の場合はストリームの現在位置からコピーします。

戻り値(return)

int|false

ストリームから別のストリームへコピーされたバイト数、またはエラー発生時にはfalseを返します。

【PHP8.x】stream_copy_to_stream関数の使い方 | いっしー@Webエンジニア