PHP 指定バイト数でファイルを分割&結合する
大きなファイルを適当なサイズに分割して送信。受信元で結合ということをPHPでやりたい。
どんなプログラムになるか、ファイル出力ベースで調べてみました。
フィアルの分割
この画像ファイルを60Kbyte毎に分割してみます。
分割するプログラムはこんな感じになりました。
- <?php
- // ファイルの内容を取得
- $image = file_get_contents('miku.png');
- // バイト数を取得
- $bytes = strlen($image);
- // 分割するバイト数
- $cut_bytes = 60 * 1024;
- $split_count = 1;
- $start = 0;
- while(true) {
- // ファイルを分割して保存
- $cut_image = substr($image, $start, $cut_bytes);
- if (empty($cut_image)) {
- break;
- }
- file_put_contents("out.{$split_count}", $cut_image);
- $split_count++;
- $start += $cut_bytes;
- }
プログラムの実行前。
実行後、5つのファイルに分割できました。
ファイルの結合
結合はこんな感じです。
- <?php
- $image = '';
- for ($i = 1; $i <= 5; $i++) {
- $image .= file_get_contents("out.{$i}");
- }
- file_put_contents("result.png", $image);
実行後、ちゃんと復元されました。
file_put_contents
ドキュメントをよく読んでみると、
file_put_contents
一旦変数に格納せず、追記出力でもOKですね。
- <?php
- for ($i = 1; $i <= 5; $i++) {
- $image = file_get_contents("out.{$i}");
- file_put_contents("result.png", $image, FILE_APPEND);
- }
コメント