Windows Azure でホストされている仮想マシンがあり、LAMP スタックをセットアップしました。Web サイトでは、ユーザーはアルバムを作成し、画像をアップロードできます。これらのイメージは、Windows azure BLOB ストレージに格納されます。画像が大きくなる可能性があるため、ファイルをチャンクに分割してから、次のようにアップロードします。
$blockMaxSize = 2*1024*1024; //2MB
$fileSize = $_FILES['Filedata']['size'];
$numOfBlocks = $fileSize/$blockMaxSize;
$currentFileIndex = 0;
$blockId=1;
$blocklist = new BlockList();
while($numOfBlocks>0)
{
$content = file_get_contents($_FILES['Filedata']['tmp_name'],NULL,NULL,$currentFileIndex,$blockMaxSize);
$currentFileIndex+=$blockMaxSize;
$numOfBlocks-=1; //Read the current block.
//upload the block
$blobRestProxy->createBlobBlock(Actual_Image, $blobName, md5($blockId),$content);
$blocklist->addLatestEntry(md5($blockId));
$blockId++;
}
$blobRestProxy->commitBlobBlocks(Actual_Image, $blobName, $blocklist->getEntries());
5Mb 程度を超えるファイルの場合、これにはかなりの時間がかかる場合があります。アップロードを高速化するために、ブロブストレージへの並列アップロードの方法を検討または実行していました。ファイルデータを含む$content配列を作成し、それらのコンテンツを並行してアップロードすることを検討していました。execと * pcntl_fork * を調べましたが、サーバー上で fork が無効になっているため、コマンドを実行する exec を使用できるかどうかわかりません。
PHPでこれを行うことは可能ですか? POSIXスレッドを使用している可能性があります。
この情報が必要かどうかはわかりませんが、仮想マシンには 4 つのコアがありました。