1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383
|
<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="zend.service.windowsazure.storage.blob">
<title>Zend_Service_WindowsAzure_Storage_Blob</title>
<para>
Blob Speicher speichert ein Set von Binären Daten. Blog Speicher bietet die folgenden drei
Ressourcen an: den Speicher Account, Container und Blobs. Im eigenen Speicher Account bieten
Container einen Weg um Sets von Blobs im Speicher Account zu organisieren.
</para>
<para>
Blog Speicher wird von Windows Azure als <acronym>REST</acronym> <acronym>API</acronym>
angeboten welcher von der Klasse
<classname>Zend_Service_WindowsAzure_Storage_Blob</classname> umhüllt ist um ein natives
<acronym>PHP</acronym> Interface zum Speicher Account zu bieten.
</para>
<sect2 id="zend.service.windowsazure.storage.blob.api">
<title>API Beispiele</title>
<para>
Dieser Abschnitt zeigt einige Beispiele der Verwendung der Klasse
<classname>Zend_Service_WindowsAzure_Storage_Blob</classname>. Andere Features sind im
Download Paket vorhanden sowie in der detailierten <acronym>API</acronym> Dokumentation
dieser Features.
</para>
<sect3 id="zend.service.windowsazure.storage.blob.api.create-container">
<title>Erstellung einer Speicher Containers</title>
<para>
Bei Verwendung des folgenden Codes kann ein Speicher Container auf dem Development
Speicher erstellt werden.
</para>
<example id="zend.service.windowsazure.storage.blob.api.create-container.example">
<title>Erstellung eines Speicher Containers</title>
<programlisting language="php"><![CDATA[
$storageClient = new Zend_Service_WindowsAzure_Storage_Blob();
$result = $storageClient->createContainer('testcontainer');
echo 'Der Name des Containers ist: ' . $result->Name;
]]></programlisting>
</example>
</sect3>
<sect3 id="zend.service.windowsazure.storage.blob.api.delete-container">
<title>Löschen eines Speicher Containers</title>
<para>
Bei Verwendung des folgenden Codes kann ein Blob Speicher Container vom Development
Speicher entfernt werden.
</para>
<example id="zend.service.windowsazure.storage.blob.api.delete-container.example">
<title>Löschen eines Speicher Containers</title>
<programlisting language="php"><![CDATA[
$storageClient = new Zend_Service_WindowsAzure_Storage_Blob();
$storageClient->deleteContainer('testcontainer');
]]></programlisting>
</example>
</sect3>
<sect3 id="zend.service.windowsazure.storage.blob.api.storing-blob">
<title>Speichern eines Blobs</title>
<para>
Bei Verwendung des folgenden Codes kann ein Blob zu einem Blog Speicher Container
auf dem Development Speichers hochgeladen werden. Es ist zu beachten das der
Container hierfür bereits vorher erstellt worden sein muss.
</para>
<example id="zend.service.windowsazure.storage.blob.api.storing-blob.example">
<title>Speichern eines Blobs</title>
<programlisting language="php"><![CDATA[
$storageClient = new Zend_Service_WindowsAzure_Storage_Blob();
// /home/maarten/example.txt auf Azure hochladen
$result = $storageClient->putBlob(
'testcontainer', 'example.txt', '/home/maarten/example.txt'
);
echo 'Der Name des Blobs ist: ' . $result->Name;
]]></programlisting>
</example>
</sect3>
<sect3 id="zend.service.windowsazure.storage.blob.api.copy-blob">
<title>Kopieren eines Blobs</title>
<para>
Bei Verwendung des folgenden Codes kann ein Blob von innerhalb des Speicher Accounts
kopiert werden. Der Vorteil der Verwendung dieser Methode besteht darin das die
Kopieroperation in der Azure Wolke stattfindet und kein Downloaden vom Blob
stattfinden muss. Es ist zu beachten das in diesem Fall der Container bereits vorher
erstellt worden sein muss.
</para>
<example id="zend.service.windowsazure.storage.blob.api.copy-blob.example">
<title>Kopieren eines Blobs</title>
<programlisting language="php"><![CDATA[
$storageClient = new Zend_Service_WindowsAzure_Storage_Blob();
// Kopiert example.txt auf example2.txt
$result = $storageClient->copyBlob(
'testcontainer', 'example.txt', 'testcontainer', 'example2.txt'
);
echo 'Der Name des kopierten Blobs ist: ' . $result->Name;
]]></programlisting>
</example>
</sect3>
<sect3 id="zend.service.windowsazure.storage.blob.api.download-blob">
<title>Herunterladen eines Blobs</title>
<para>
Bei Verwendung des folgenden Codes kann ein Blob von einem Blob Speicher Container
auf den Development Speicher heruntergeladen werden. Es ist zu beachten das der
Container hierfür bereits vorher erstellt wurden sein und ein Blob darauf
hochgeladen sein muss.
</para>
<example id="zend.service.windowsazure.storage.blob.api.download-blob.example">
<title>Herunterladen eines Blobs</title>
<programlisting language="php"><![CDATA[
$storageClient = new Zend_Service_WindowsAzure_Storage_Blob();
// Lädt die Datei /home/maarten/example.txt herunter
$storageClient->getBlob(
'testcontainer', 'example.txt', '/home/maarten/example.txt'
);
]]></programlisting>
</example>
</sect3>
<sect3 id="zend.service.windowsazure.storage.blob.api.public-blob">
<title>Einen Blob öffentlich verfügbar machen</title>
<para>
Standardmäßig sind Blob Speicher Container in Windows Azure geschützt vor
öffentlichem Zugriff. Wenn ein Benutzer im Internet Zugriff auf einen Blob Container
haben soll, kann seine ACL auf öffentlich (public) gesetzt werden. Es ist zu
beachten dass das auf den kompletten Container angewendet wird, und nicht auf einen
einzelnen Blob!
</para>
<para>
Bei Verwendung des folgenden Codes kann die ACL eines Blob Speicher Containers auf
den Development Speicher gesetzt werden. Es ist zu beachten das der Container
hierfür bereits vorher erstellt worden sein muss.
</para>
<example id="zend.service.windowsazure.storage.blob.api.public-blob.example">
<title>Einen Blob öffentlich zugänglich machen</title>
<programlisting language="php"><![CDATA[
$storageClient = new Zend_Service_WindowsAzure_Storage_Blob();
// Den Container öffentlich zugänglich machen
// (alle Blobs durchgehen und Blob Daten lesen)
$storageClient->setContainerAcl(
'testcontainer',
Zend_Service_WindowsAzure_Storage_Blob::ACL_PUBLIC_CONTAINER
);
]]></programlisting>
</example>
</sect3>
</sect2>
<sect2 id="zend.service.windowsazure.storage.blob.root">
<title>Stamm Container</title>
<para>
Der Windows Azure Blob Speicher bietet Unterstützung für die Arbeit mit einem "Stamm
Container" (root). Das bedeutet das ein Blob im Stamm des Speicher Containers
gespeichert werden kann, z.B.
<filename>http://myaccount.blob.core.windows.net/somefile.txt</filename>.
</para>
<para>
Um mit dem Stamm Container zu arbieten sollte er zuerst durch Verwendung der
<methodname>createContainer()</methodname> Methode erstellt worden sein, und der
Container sollte <varname>$root</varname> heißen. Alle anderen Operationen auf dem
Stamm Container sollten ausgeführt werden indem der Containernamen auf
<varname>$root</varname> gesetzt wird.
</para>
</sect2>
<sect2 id="zend.service.windowsazure.storage.blob.wrapper">
<title>Blob Speicher Stream Wrapper</title>
<para>
Die Windows Azure <acronym>SDK</acronym> für <acronym>PHP</acronym> bietet Unterstützung
für die Registrierung eines Blob Speicher Clients als <acronym>PHP</acronym> File Stream
Wrapper. Der Blob Speicher Stream Wrapper bietet Unterstützung für die Verwendung von
regulären Datei Operationen auf dem Windows Azure Blob Speicher. Zum Beispiel kann eine
Datei vom Windows Azure Blob Speicher aus mit der Funktion
<methodname>fopen()</methodname> geöffnet werden:
</para>
<example id="zend.service.windowsazure.storage.blob.wrapper.sample">
<title>Beispiel der Verwendung des Blob Speicher Stream Wrappers</title>
<programlisting language="php"><![CDATA[
$fileHandle = fopen('azure://mycontainer/myfile.txt', 'r');
// ...
fclose($fileHandle);
]]></programlisting>
</example>
<para>
Um das zu tun muss die Windows Azure <acronym>SDK</acronym> für den
<acronym>PHP</acronym> Blob Speicher Client als Stream Wrapper registriert werden. Das
kann getan werden indem die Methode <methodname>registerStreamWrapper()</methodname>
aufgerufen wird:
</para>
<example id="zend.service.windowsazure.storage.blob.wrapper.register">
<title>Den Blob Speicher Stream Wrapper registrieren</title>
<programlisting language="php"><![CDATA[
$storageClient = new Zend_Service_WindowsAzure_Storage_Blob();
// registriert azure:// auf diesem Speicher Client
$storageClient->registerStreamWrapper();
// oder:
// registriert blob:// auf diesem Speicher Client
$storageClient->registerStreamWrapper('blob://');
]]></programlisting>
</example>
<para>
Um den Stream Wrapper zu deregistrieren kann die Methode
<methodname>unregisterStreamWrapper()</methodname> verwendet werden.
</para>
</sect2>
<sect2 id="zend.service.windowsazure.storage.blob.sharedaccesssig">
<title>Shared Access Signaturen</title>
<para>
Der Windows Azure Bolb Speicher bietet ein Feature welches "Shared Access Signatures"
genannt wird. Standardmäßig gibt es nur ein Level der Authorosierung welche in Windows
Azure Blob Speicher möglich ist: entweder ist ein Container privat oder er ist
öffentlich. Shared Access Signaturen bieten eine feinere Methode der Authorisierung:
Lese-, Schreib-, Lösch- und Anzeigerechte können auf einem Container oder einem Blob
für einen speziellen Client zugeordnet werden indem ein URL-basierendes Modell verwendet
wird.
</para>
<para>
Ein Beispiel würde die folgende Signatur sein:
</para>
<literallayout>
http://phpstorage.blob.core.windows.net/phpazuretestshared1?st=2009-08-17T09%3A06%3A17Z&se=2009-08-17T09%3A56%3A17Z&sr=c&sp=w&sig=hscQ7Su1nqd91OfMTwTkxabhJSaspx%2BD%2Fz8UqZAgn9s%3D
</literallayout>
<para>
Die obige Signatur gibt Schreibrechte auf den Container "phpazuretestshared1" des
Accounts "phpstorage".
</para>
<sect3 id="zend.service.windowsazure.storage.blob.sharedaccesssig.generate">
<title>Erstellen einer Shared Access Signature</title>
<para>
Wenn man Eigentümer eines Windows Azure Blob Speicher Accounts ist kann man einen
geteilten Zugriffsschlüssel für jeden Typ einer Ressource im eigenen Account
erstellen und teilen. Um das zu tun kann die Methode
<methodname>generateSharedAccessUrl()</methodname> des
<classname>Zend_Service_WindowsAzure_Storage_Blob</classname> Speicher Clients
verwendet werden.
</para>
<para>
Der folgende Beispielcode erzeugt eine Shared Access Signatur für den
Schreibzugriff in einem Container der "container1" heißt, in einem Zeitrahmen von
3000 Sekunden.
</para>
<example id="zend.service.windowsazure.storage.blob.sharedaccesssig.generate-2">
<title>Erstellung einer Shared Access Signatur für einen Container</title>
<programlisting language="php"><![CDATA[
$storageClient = new Zend_Service_WindowsAzure_Storage_Blob();
$sharedAccessUrl = $storageClient->generateSharedAccessUrl(
'container1',
'',
'c',
'w',
$storageClient ->isoDate(time() - 500),
$storageClient ->isoDate(time() + 3000)
);
]]></programlisting>
</example>
<para>
Der folgende Beispielcode erzeugt eine Shared Access Signatur für den Lesezugriff in
einem Blob der <filename>test.txt</filename> heißt und einem Container der
"container1" heißt, in einem Zeitrahmen von 3000 Sekunden.
</para>
<example id="zend.service.windowsazure.storage.blob.sharedaccesssig-generate-3">
<title>Erzeugen einer Shared Access Signatur für einen Blob</title>
<programlisting language="php"><![CDATA[
$storageClient = new Zend_Service_WindowsAzure_Storage_Blob();
$sharedAccessUrl = $storageClient->generateSharedAccessUrl(
'container1',
'test.txt',
'b',
'r',
$storageClient ->isoDate(time() - 500),
$storageClient ->isoDate(time() + 3000)
);
]]></programlisting>
</example>
</sect3>
<sect3 id="zend.service.windowsazure.storage.blob.sharedaccesssig.consume">
<title>Arbeiten mit Shared Access Signaturen von anderen</title>
<para>
Wenn man eine Shared Access Signatur von jemandem anderen erhält kann man die
Windows Azure <acronym>SDK</acronym> für <acronym>PHP</acronym> verwenden um mit der
adressierten Ressource zu arbeiten. Zum Beispiel kann man die folgende Signatur vom
Eigentümer eines Speicher Accounts erhalten:
</para>
<literallayout>
http://phpstorage.blob.core.windows.net/phpazuretestshared1?st=2009-08-17T09%3A06%3A17Z&se=2009-08-17T09%3A56%3A17Z&sr=c&sp=w&sig=hscQ7Su1nqd91OfMTwTkxabhJSaspx%2BD%2Fz8UqZAgn9s%3D
</literallayout>
<para>
Die obige Signatur gibt Schreibzugriff auf "phpazuretestshared1" "container" des
PhpSpeicher Accounts. Da der geteilte Schlüssel für den Account nicht bekannt ist,
kann die Shared Access Signatur verwendet werden um mit der authorisierten Ressource
zu arbeiten.
</para>
<example id="zend.service.windowsazure.storage.blob.sharedaccesssig.consuming">
<title>Verwenden einer Shared Access Signatur für einen Container</title>
<programlisting language="php"><![CDATA[
$storageClient = new Zend_Service_WindowsAzure_Storage_Blob(
'blob.core.windows.net', 'phpstorage', ''
);
$storageClient->setCredentials(
new Zend_Service_WindowsAzure_Credentials_SharedAccessSignature()
);
$storageClient->getCredentials()->setPermissionSet(array(
'http://phpstorage.blob.core.windows.net/phpazuretestshared1?st=2009-08-17T09%3A06%3A17Z&se=2009-08-17T09%3A56%3A17Z&sr=c&sp=w&sig=hscQ7Su1nqd91OfMTwTkxabhJSaspx%2BD%2Fz8UqZAgn9s%3D'
));
$storageClient->putBlob(
'phpazuretestshared1', 'NewBlob.txt', 'C:\Files\dataforazure.txt'
);
]]></programlisting>
</example>
<para>
Es ist zu beachten das es keine explizite Erlaubnis für das Schreiben eines
spezifischen Blobs gab. Stattdessen hat die Windows Azure <acronym>SDK</acronym> für
<acronym>PHP</acronym> festgestellt das eine Erlaubnis benötigt wurde um entweder an
den spezifischen Blob zu schreiben, oder an seinen Container zu schreiben. Da nur
eine Signatur für das letztere vorhanden war, hat die Windows Azure
<acronym>SDK</acronym> für <acronym>PHP</acronym> diese Zugriffsrechte ausgewählt um
die Anfrage auf den Windows Azure Blob Speicher durchzuführen.
</para>
</sect3>
</sect2>
</sect1>
|