2014-01-14 90 views
3

我想在PHP的Amazon S3測試我的localhost在Ubuntu系統上,但繼續得到同樣的錯誤:亞馬遜Web服務S3顯示SSL捲曲錯誤

S3::listBuckets(): [35] error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

這是顯示桶列表的功能。

public function buckets() { 
      $s3 = $this->getInstance(); 
/*print_r($this->_s3->listBuckets()); nothing is print else shows error */ 
      return $this->_s3->listBuckets(); 


     } 

以下是此API函數調用的亞馬遜API函數。

public static function listBuckets($detailed = false) { 
     $rest = new S3Request('GET', '', ''); 
     $rest = $rest->getResponse(); 
     if ($rest->error === false && $rest->code !== 200) 
      $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); 
     if ($rest->error !== false) { 
      trigger_error(sprintf("S3::listBuckets(): [%s] %s", $rest->error['code'], $rest->error['message']), E_USER_WARNING); 
      return false; 
     } 
     $results = array(); 
     if (!isset($rest->body->Buckets)) 
      return $results; 

     if ($detailed) { 
      if (isset($rest->body->Owner, $rest->body->Owner->ID, $rest->body->Owner->DisplayName)) 
       $results['owner'] = array(
        'id' => (string) $rest->body->Owner->ID, 'name' => (string) $rest->body->Owner->ID 
       ); 
      $results['buckets'] = array(); 
      foreach ($rest->body->Buckets->Bucket as $b) 
       $results['buckets'][] = array(
        'name' => (string) $b->Name, 'time' => strtotime((string) $b->CreationDate) 
       ); 
     } 
     else 
      foreach ($rest->body->Buckets->Bucket as $b) 
       $results[] = (string) $b->Name; 

     return $results; 
    } 
+0

如果遠程服務器不說SSL,通常會發生這種情況。 –

+0

它在另一臺服務器上工作正常。 –

+0

您的'cURL'未編譯支持執行SSL請求。使用適當的二進制文件重新編譯。 – Ohgodwhy

回答

1

它是在本地主機上AWS S3集成發生最常見的錯誤。

  1. 檢查是cURL啓用並且Open SSL也處於活動狀態。
  2. http://curl.haxx.se/ca/cacert.pem獲取文件並將其保存到硬盤驅動器的庫中。重命名它cacert.pem。
  3. 將php.ini中的curl.cainfo配置爲步驟2中下載文件的完整路徑。
  4. 重新啓動Apache。

它會完美地工作。

+2

問題一般是由於升級PHP 5.2到5.5而發生的 –

+0

對我不起作用我很瘋狂 – cikatomo

3

看來你已經改變了你的PHP版本,因爲這個bug在PHP 5.4中發生過幾次,但它在以前的版本中完美地工作。您可以再次使用Open SSL重新安裝cURL。

+0

它實際上需要保存其他庫。一年後我找到了這個解決方案:) –