Symfoware

Symfowareについての考察blog

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. }



関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2015/10/24(土) 20:23:22|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<BeansTalkdのジョブにファイルを分割して投入&復元する | ホーム | BeansTalkd ジョブの優先順位(priority)を変更する>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1809-24d98d36
この記事にトラックバックする(FC2ブログユーザー)