2013-04-16 4 views
0

Windows Azure에서 호스팅되는 가상 컴퓨터가 있고이 컴퓨터에 램프 스택을 설정했습니다. 이 웹 사이트에서는 사용자가 앨범을 만들고 이미지를 업로드 할 수 있습니다. 이러한 이미지는 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 저장소에 병렬로 업로드하는 것을 보았습니다. 나는 $ 콘텐츠 파일 데이터를 포함하는 배열을 만들고 그 내용을 병렬로 업로드하려고합니다. 나는 exec과 * pcntl_fork *를 읽었지만 포크는 서버에서 사용할 수 없으며이 명령을 실행할 때 exec를 사용할 수 있는지 잘 모르겠습니다.

PHP로 가능합니까? 아마도 POSIX 스레드를 사용하고있을 것입니다.

이 정보가 필요하지만 가상 컴퓨터에 4 개의 코어가 있는지 확실하지 않습니다.

답변

1

PHP는 멀티 스레딩을 기본적으로 지원하지 않습니다.

http://phplens.com/phpeverywhere/?q=node/view/254

매우 강력한 아니지만, 그것은 당신에게 멀티 태스킹을 조금 여유가해야

당신은 비록 존 임에 의해 게시 된 것과 같은 접근 방식을 사용할 수 있습니다.

당신은 parallal 처리를 위해 다음과 같은 파일을 추가 할 수있다

if (1) { /* SAMPLE USAGE BELOW */ 

$fp1 = JobStartAsync('localhost','/jobs/j1.php'); 
$fp2 = JobStartAsync('localhost','/jobs/j2.php'); 


while (true) { 
    sleep(1); 

    $r1 = JobPollAsync($fp1); 
    $r2 = JobPollAsync($fp2); 

    if ($r1 === false && $r2 === false) break; 

    echo "<b>r1 = </b>$r1<br>"; 
    echo "<b>r2 = </b>$r2<hr>"; 
    flush(); @ob_flush(); 
} 

echo "<h3>Jobs Complete</h3>"; 
} 

이 코드를 참조하십시오.

+0

이 모양이 좋지만이 파일에 인수를 전달할 수있는 방법이 있습니까? 업로드 할 데이터가 있도록 콘텐츠 및 ID 정보를 전달해야합니다. – Saurabh

+0

항상 쿼리 문자열로 데이터를 전달할 수 있습니다. –