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
您始终可以将数据作为查询字符串传递。 –