PHP 指定バイト数でファイルを分割&結合する

大きなファイルを適当なサイズに分割して送信。
受信元で結合ということをPHPでやりたい。

どんなプログラムになるか、ファイル出力ベースで調べてみました。



フィアルの分割



この画像ファイルを60Kbyte毎に分割してみます。

651_01.png


分割するプログラムはこんな感じになりました。


  1. <?php
  2. // ファイルの内容を取得
  3. $image = file_get_contents('miku.png');
  4. // バイト数を取得
  5. $bytes = strlen($image);
  6. // 分割するバイト数
  7. $cut_bytes = 60 * 1024;
  8. $split_count = 1;
  9. $start = 0;
  10. while(true) {
  11.     
  12.     // ファイルを分割して保存
  13.     $cut_image = substr($image, $start, $cut_bytes);
  14.     if (empty($cut_image)) {
  15.         break;
  16.     }
  17.     
  18.     file_put_contents("out.{$split_count}", $cut_image);
  19.     $split_count++;
  20.     $start += $cut_bytes;
  21.     
  22. }





プログラムの実行前。

651_02.png


実行後、5つのファイルに分割できました。

651_03.png





ファイルの結合



結合はこんな感じです。


  1. <?php
  2. $image = '';
  3. for ($i = 1; $i <= 5; $i++) {
  4.     $image .= file_get_contents("out.{$i}");
  5. }
  6. file_put_contents("result.png", $image);




実行後、ちゃんと復元されました。

651_04.png





file_put_contents



ドキュメントをよく読んでみると、
file_put_contents

一旦変数に格納せず、追記出力でもOKですね。


  1. <?php
  2. for ($i = 1; $i <= 5; $i++) {
  3.     $image = file_get_contents("out.{$i}");
  4.     file_put_contents("result.png", $image, FILE_APPEND);
  5. }



関連記事

コメント

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
https://symfo.web.fc2.com/

PR

検索フォーム

月別アーカイブ