0
我有一個託管在Windows Azure上的虛擬機,並在其上設置了一個LAMP堆棧。該網站允許用戶創建相冊並上傳圖片。這些圖像存儲在Windows azure blob存儲中。正如圖片可大了,我分裂文件成塊,然後將它們上傳如下:PHP中的並行線程
$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的左右。我正在尋找方式或執行並行上傳到blob存儲,以加快上傳速度。我正在創建一個包含文件數據,然後並行上傳這些內容的$ content數組。我讀了exec和* pcntl_fork *但fork在服務器上是禁用的,我不確定我是否可以使用exec來執行命令。
是否有可能在PHP中做到這一點?也許使用POSIX線程。
不確定是否需要此信息,但虛擬機有4個內核。
這看起來不錯,但有沒有辦法讓我將參數傳遞給這些文件?我需要將內容和ID信息傳遞給他們,以便他們有數據上傳。 – Saurabh
您始終可以將數據作爲查詢字符串傳遞。 –