2010-07-19 53 views
0

我試圖將圖像下載到一個ZipArchive,從通過其API一個社交網站,我用下面的代碼:使用cURL圖像下載到ZipArchive

... 
public function downloadAlbumZip($album_name, $photos) 
{ 
    $zip = new ZipArchive(); 
    $album_name = $this->_cleanAlbumName($album_name); 
    $filename = 'album.zip'; 
    $file = tempnam(PHOTOS, "{$album_name}-").'.zip'; 

    if ($zip->open($file, ZIPARCHIVE::CREATE) === TRUE) 
    { 
     foreach ($photos as $photo) { 
      $image = $photo['pid'] . '.jpg'; 
      $binary = $this->_getImage($photo['src']); 
      $zip->addFromString($image, $binary); 
     } 

     $output = print_r($zip, true); 
     $zip->close(); 

     exit('Zip Saved.<br /><a href="javascript:history.go(-1);">Back to Album Overview</a>'); 
    } else { 
     die('Zip Failed.'); 
    } 
} 

private function _getImage($img) 
{ 
    if (function_exists('curl_init')) 
    { 
     $ch = curl_init($img); 

     curl_setopt($ch, CURLOPT_HEADER, 0); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); 

     $rawdata = curl_exec($ch); 
     curl_close($ch); 

     return $rawdata; 
    } 
} 
... 

哪些工作,但很速度慢並且經常以超時錯誤結束,任何人都可以推薦一種方法來加快速度?

感謝

回答

1

你應該首先下載所有圖像,驗證它們是否正常,然後在超時重新下載。

您可以使用CURL_MULTI_EXEC並行地執行圖像加速來下載圖像。請記住,加速任何事情的關鍵是確定瓶頸在哪裏。它壓縮文件嗎?如果是這種情況,你可以使用本地二進制文件和shell。它是否下載圖像?這是圖像的大小嗎?

您應該執行一些分析,即使它只是回顯time()以查看哪些操作花費的時間最長。