BeansTalkdのジョブにファイルを分割して投入&復元する
PHPでファイルの分割と結合方法を調べてみました。PHP 指定バイト数でファイルを分割&結合する
下調べはすんだので、Beanstalkdのジョブにファイルを分割して投入&復元してみます。
データの登録
データの登録はこんな感じになりました。
- <?php
- require_once('Client.php');
- use Beanstalk\Client;
- // beanstalkdに接続
- $beanstalk = new Client(array('host'=>'192.168.1.102', 'port' => 11300));
- $beanstalk->connect();
- // --- データの登録
- // チューブに接続
- $beanstalk->useTube('test');
- // ファイルの内容を取得
- $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;
- }
- // データを登録
- $beanstalk->put(
- 1, // Jobの優先度
- 0, // 即時実行するか
- 1, // Jobの実行時間(秒)
- $cut_image // Jobのデータ
- );
- $split_count++;
- $start += $cut_bytes;
- }
- // 切断
- $beanstalk->disconnect();
ドキュメントによると、
https://github.com/kr/beanstalkd/blob/master/doc/protocol.en-US.md
bodyに登録できるサイズはデフォルトで2 ** 16 (2の16乗。65536) byteですね。
※設定で変更可能
60Kbyteで分割しているので、ちゃんと登録出来ました。
データの復元
データの復元はこんな感じになります。
- <?php
- require_once('Client.php');
- use Beanstalk\Client;
- // beanstalkdに接続
- $beanstalk = new Client(array('host'=>'192.168.1.102', 'port' => 11300));
- $beanstalk->connect();
- // --- データの取り出し
- // testチューブを監視
- $beanstalk->watch('test');
- while(true){
- // ジョブの内容を取得&ロック
- $job = $beanstalk->reserve();
- // 取得できた内容を保存
- file_put_contents("result.png", $job['body'], FILE_APPEND);
- // ジョブを処理したので削除
- $beanstalk->delete($job['id']);
- }
- // 切断
- $beanstalk->disconnect();
とりあえずのお試しなので適当です。
これでちゃんと画像の分割登録&復元が行えることを確認しました。
- 関連記事
コメント