0

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 つのコアがありました。

4

1 に答える 1