[Azure][PHP] Jak uzyskać dostęp do kontenera Azure Storage


(Gardner) #1

Witam.

Jestem studentem w trakcie kończenia pracy inżynierskiej, jednakże potrzebuję pomocy. Projekt, który wykonuję w języku PHP działa poprawnie w Windows Azure, jednakże muszę dodać jedną dodatkową funkcję - możliwość dostępu i tworzenia plików w kontenerze Azure Storage. W poszukiwaniu odpowiedzi dostałem info, że mogę to osiągnąć przez Visual Studio i projekt CGI WebRole z Azure SDK, niestety po zainstalowaniu SDK takowego template'a nie ma (jedyne WebRole to różne warianty ASP.NET).

Z tego, co wyczytałem, Microsoft uprzejmie usunął CGI WebRole z SDK w wersji 1.4. W takim razie, czy ktoś miałby jeszcze instalator wersji 1.3? Ewentualnie, czy ktoś umiałby mi wytłumaczyć jak w inny sposób osiągnąć zamierzony wynik? Sam projekt był napisany w Notatniku++ i wrzucony przez Git (zgodnie z resztą z opisem na stronie Azure) i, jak już wcześniej wspomniałem, działa przyzwoicie włącznie z bazą MySQL.

Proszę, pomóżcie. Czas nagli, a ja tydzień siedzę nad obsługą Azure Storage...

Pozdrawiam

Gardner


(mktos) #2

Korzystasz z API Azure dla PHP? https://github.com/WindowsAzure/azure-sdk-for-php Ono ma tam obsługę blobów w Azure Storage.

Ja używałem starszej wersji (http://phpazure.codeplex.com/) tworząc bardzo prostą klasę, która potrafiła zapisywać do blobów: http://code.ktos.info/tinyshare/src/f95 … at=default


(Gardner) #3

Dziękuję za odpowiedź.

Wcześniej nie miałem do czynienia z Windows Azure, niestety wymyśliłem sobie, że będzie to dobry temat pracy inżynierskiej, taki przyszłościowy… Tak, instalowałem Azure SDK przez composer.json, według tutoriali na stronach deweloperskich Azure, jednak w ich wersji mamy do czynienia z prostym podłączeniem do kontenera:

require_once 'vendor\autoload.php';


use WindowsAzure\Common\ServicesBuilder;


$blobRestProxy = ServicesBuilder::getInstance()->createBlobService($connectionString);

gdzie $connectionString pewnie wygląda tak

$connectionString = "DefaultEndpointsProtocol='http';AccountName='kontoStorage';AccountKey='klucz'";

Jednak w moim przypadku powyższy kod zatrzymuje się (dosłownie) na deklaracji $blobRestProxy. Po prostu dalej skrypt nie wykonuje już nic (włącznie z zamykaniem tagów HTML, które są już za skryptem. Inny sposób podpięcia się pod kontener blobów (biorąc z Twojego przykładu)

$blob = new Microsoft_WindowsAzure_Storage_Blob($address, $account, $key);

także nie działa, wynik taki sam jak powyżej. Azure głupieje i blokuje się w wykonaniu kodu.

Z ciekawości sprawdzałem PHP error log, ale był pusty, przez co rośnie poziom mojej irytacji tym rozwiązaniem… Czy mógłbyś tak “na szybko” w jakimś prostym przykładzie (taki mikro gotowiec, których nigdzie znaleźć nie mogę, żeby pojąc ideę) przedstawić prosto dostęp odczyt/zapis bloba w Azure Storage? Wiem, że się narzucam, ale sprawa jest pilna, a problem wystarczająco duży, żebym był w wiecznym stresie.


(mktos) #4

Po dłuższej chwili roboty zainstalowałem sobie PEAR + PHP Azure SDK + Azure SDK. Nie mam dostępu już do Azure, więc testowałem na lokalnym Storage Emulatorze i działa.

aztest.zip (933 KB)

https://mega.co.nz/#!ZM8FTbjD!SnudECGmI … O9hV_ONvEo

Plik index.php w głównym katalogu robi wszystko (to są dosłownie copy&paste fragmenty kodu z http://www.windowsazure.com/en-us/devel … b-service/).

Największym problemem jest to, że cała ta zabawa wymaga PEAR (dokładnie HTTP_Request2, Mail_mime i Mail_mimeDecode) i wszystko przestanie działać, jeśli tego nie masz. Pobrałem i zainstalowałem lokalnie, a potem usunąłem instalator PEAR, zostawiając same pakiety i ich zależności, Azure SDK for PHP też jest zainstalowany lokalnie ręcznie (aktualny obraz z GitHuba).


(Gardner) #5

mktos - jesteś wielki. Naprawdę, jedyna osoba, która umiała mi to wyjaśnić “jak krowie na rowie”. Dzięki Tobie udało mi się wreszcie wrzucić przykładowy plik do kontenera, PHP się nie wykłada na deklaracji. To teraz spokojniej mogę poprowadzić dalej mój projekt.

Okazało się, że instalacja PHP SDK dla Azure przez composer po prostu nie działa. Jeszcze raz dziękuję, jak już wspominałem - jesteś wielki :slight_smile: