2013-09-05 17 views
5

muszę utworzyć podpisaną $ URL dla Amazon S3 i otwiera się doskonale w przeglądarce.Sprawdź, czy plik istnieje na Amazon S3 Podpisano URL

http://testbucket.com.s3.amazonaws.com/100-game-play-intro-1.m4v?AWSAccessKeyId=AKIAJUAjhkhkjhMO73BF5Q&Expires=1378465934&Signature=ttmsAUDgJjCXepwEXvl8JdFu%2F60%3D 

** nazwa łyżki i accesskey zmieniło w tym przykładzie

Ja jednak próbuje następnie użyć funkcji poniżej, aby sprawdzić (za pomocą curl), czy plik istnieje. Nie powiedzie się połączenie CURL. Jeśli zastąpię $ URL powyżej adresem URL obrazu spoza s3, ten kod działa idealnie.

wiem, czy plik istnieje w Amazon, ale nie może pracować się, dlaczego ten kod nie powiedzie się w przypadku korzystania z podpisaną adres jak wyżej

Jakieś pomysły?

Dzięki

Oto mój kod.

function remoteFileExists($url) { 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, false); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 

    //don't fetch the actual file, only get header to check if file exists 
    curl_setopt($ch, CURLOPT_HEADER, 1); 
    curl_setopt($ch, CURLOPT_NOBODY, true); 

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



    if ($result !== false) { 

     $statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 

     if ($statusCode == 200) { 
      $ret = true; 
     } else { 
      $ret = false; 
     } 

    } else { 
     $ret='connection failed'; 
    } 

    return $ret; 

} 
+0

Kiedy używam tego kodu, aby sprawdzić, czy plik istnieje na s3 z podpisanym url jak to jest prywatny wiadro (czyli nie polityka publiczna) to zawsze kończy się niepowodzeniem z „Połączenie nie powiodło się” wskazuje połączenie CURL sama nie powiodło się. –

+0

Przykro mi to łatwo rozwiązać z AWS PHP SDK, ale staram się, aby pracować bez SDK jak dodaję funkcjonalności do wtyczki wordpress. Dzięki –

Odpowiedz

4

Podczas korzystania CURLOPT_NOBODY, libcurl wysyła żądanie HTTP HEAD, a nie żądania GET.

... ciąg być podpisane powstaje przez dodanie czasownika REST, wartość content-MD5 wartość Content-Type, wygasa wartość parametru, nagłówki canonicalized x-AMZ (patrz przepis poniżej), a zasób; wszystkie oddzielone znakami nowej linii.

http://s3.amazonaws.com/doc/s3-developer-guide/RESTAuthentication.html

„reszty czasownik” - np GET vs HEAD - musi być spójna pomiędzy podpisaniem wygenerować i żądania, które sprawiają, więc podpis, który będzie ważny przez GET nie będzie ważna dla HEAD i odwrotnie.

Zamiast potwierdzania konieczne będzie podpisanie zgłoszenia w celu sprawdzenia poprawności pliku w ten sposób.

+0

Dziękuję za odpowiedź. Wydaje się z moich badań, że jest to poprawna odpowiedź, biorąc pod uwagę moje wymaganie, aby nie używać SDK. Mimo, że mam teraz realizowane SDK do wtyczki jak wydaje się, że najbardziej niezawodne rozwiązanie i daje dostęp do innych funkcjonalności będę pewnie wykorzystać. Dzięki jeszcze raz. –