Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Upload-Dateien mit Azure Storage Blob

PHP-Upload-Dateien mit Azure Storage Blob

不言
不言Original
2018-07-05 14:04:072246Durchsuche

Dieser Artikel stellt hauptsächlich die Verwendung von Azure Storage Blob zum Hochladen von Dateien vor. Jetzt kann ich ihn mit allen teilen, die ihn benötigen.

Vorwort

Aufgabe Wenn es um ein Projekt geht, eine kleine Website, die Content-Management erfordert, werden die Front-End-Seitenanzeige und Spezialeffekte von Front-End-Kollegen erledigt. Ich bin für den Aufbau des Content-Management-Backends und die Bereitstellung von Datenschnittstellen verantwortlich. Dieses Projekt erfordert, dass die Verwaltungsseite Videos hochladen kann, aber die von Partei A bereitgestellte Serverbandbreite ist sehr gering und es gibt andere Projekte, die parallel auf demselben Server laufen.
Um die späteren Auswirkungen plötzlicher Upgrades zu verhindern, schlug der Teamleiter vor, dass ich den Umgang mit Azure Storage Blob lerne und jederzeit für Upgrades bereit bin.

PHP-Versionseinschränkungen

Ich habe das offizielle SDK in Github gefunden.

Mindestanforderungen

PHP 5.6 oder höher

Da die lokal konfigurierte PHP-Umgebung 5.5.12 ist und das SDK Erfordert Die Mindestversion von PHP ist 5.6, Composer hat das Update
blockiert, daher habe ich composer update --ignore-platform-reqs verwendet, um die Bedarfsüberwachung zu umgehen und das Upgrade zu erzwingen.
Wenn const jedoch auf ein Array in der Klasse BlobResources.php gesetzt ist, wird in 5.5 ein Fehler gemeldet.

Fatal error: Arrays are not allowed in class constants in E:\webroot\tp5cms\vendor\microsoft\azure-storage-blob\src\Blob\Internal\BlobResources.php on line 103

Es bleibt keine andere Wahl, als PHP zu aktualisieren.

Upgrade von WAMP 2.5-3.1

Aus Entwicklungsgründen haben wir uns entschieden, wampserver auf die neueste Version zu aktualisieren.
Beim Wamp-Upgrade gibt es einen Trick: Sie können die Installation nicht direkt überschreiben. Sie müssen zuerst die alte Version entfernen und dann die neue Version installieren.
Lesen Sie die Upgrade-Tipps sorgfältig durch.
Zusammenfassend müssen Sie wahrscheinlich die folgenden zwei Dinge tun:

  • Dienst entfernen

    WampServer starten
    [Wichtig] Melden Sie sich bei MySQL an, um alle Datenbankdaten zu sichern.
    wampmanager -> MySQL-Dienst entfernen.
    wampmanager -> -> Dienst entfernen Entfernen Sie den Apache-Dienst
    stoppen Sie wampmanager
    Rechtsklick auf wampmanager -> 🎜>Will wamp Nennen Sie einen anderen Namen für die Sicherung

  • Installieren Sie den Speicheremulator

    Da es im Unternehmen kein Azure-Konto zum Testen gibt, hat Azure glücklicherweise eines ein Speicheremulator zum Testen und Entwickeln. Windows-Systeme können direkt heruntergeladen und installiert werden, Linux-Systeme können den Open-Source-Speicheremulator Azurite nutzen.

    Laden Sie den Emulator herunter, hier ist der Download-Link.

Nachdem die Installation abgeschlossen ist, führen Sie

aus und finden Sie eine Eingabeaufforderung, die Sie zur Installation benötigen

. Hier finden Sie einen Download-Link. Wählen Sie Express Edition und dann LocalDB zum Herunterladen und Installieren aus.
  1. Führen Sie cmd erneut aus und finden Sie einen Fehler
  2. C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator>AzureStorageEmulato
    r.exe start
    Windows Azure Storage Emulator 5.3.0.0 command line tool
     
    未经处理的异常: System.TimeoutException: Unable to open wait handle.
    在 Microsoft.WindowsAzure.Storage.Emulator.Controller.EmulatorProcessControll
    er.InternalWaitForStorageEmulator(Int32 timeoutInMilliseconds)
    在 Microsoft.WindowsAzure.Storage.Emulator.Controller.EmulatorProcessControll
    er.EnsureRunning(Int32 timeoutInMilliseconds)
    在 Microsoft.WindowsAzure.Storage.Emulator.Commands.StartCommand.RunCommand()
     
    在 Microsoft.WindowsAzure.Storage.Emulator.Program.Main(String[] args)
    StartStorageEmulator.cmdNach einer Abfrage stellte ich fest, dass dies daran lag, dass ein Prozess Port 10000 belegte. SQL Server Express Local DB
    #运行:>C:\Users\Walter>netstat -p tcp -ano | findstr :10000> TCP 127.0.0.1:10000 0.0.0.0:0 LISTENING 2664
     #根据PID 2664查询对应的进程>C:\Users\Walter>tasklist | findstr "2664">YunDetectService.exe 2664 Console 1 9,944 K
     
    #只是一个不重要的进程,去掉后继续开发>C:\Users\Walter>taskkill /pid 2664 /f>成功: 已终止 PID 为 2664 的进程。
     
    #以下是模拟器成功运行的范例>C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator>AzureStorageEmulator.exe start
    Windows Azure Storage Emulator 5.3.0.0 command line tool
    The storage emulator was successfully started. 
    >C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator>AzureStorageEmulator.exe status
    Windows Azure Storage Emulator 5.3.0.0 command line tool
    IsRunning: True
    BlobEndpoint: http://127.0.0.1:10000/QueueEndpoint: http://127.0.0.1:10001/TableEndpoint: http://127.0.0.1:10002/

  3. Entwicklung starten
  4. Sie können anhand offizieller Beispiele versuchen, Container-, Blob- und Löschfunktionen hinzuzufügen.
  5. Nach dem erfolgreichen Hochladen des Blobs kann die Ressource im Speichersimulator nicht angesprochen werden.
z. B. verwendeter Kontoname

, erstellter Containername

, Blobname

. Gemäß den Regeln im Dokument sollte die Ressourcenadresse

sein, aber die zurückgegebenen Daten sind immer

<Error>
  <Code>ResourceNotFound</Code>
  <Message>    The specified resource does not exist. RequestId:9d2d1b08-12b1-4feb-8636-4325eb71b838 Time:2018-04-08T09:14:14.3007800Z
  </Message>
</Error>

Nachdem ich verwandte Artikel gelesen hatte, stellte ich das beim Erstellen des Containers fest Wenn keine Zugriffsberechtigungen (Zugriffsrichtlinien auf Containerebene) festgelegt wurden, ist der externe Zugriff standardmäßig verboten. devstoreaccount1mycontainerudfpbkACL-Berechtigungen (PublicAccessType) sind in drei Ebenen unterteilt: 5ac1a5c82021d.png,
und
. Der Standardwert ist http://127.0.0.1:10000/devstoreaccount1/mycontainerudfpbk/5ac1a5c82021d.png.
Wenn die Ressource extern zugänglich sein muss, setzen Sie sie auf

.

Hängen Sie Ihre eigene gekapselte Azure-Hilfsklasse an

Ich bin auch auf ein kleines Problem beim Festlegen von Berechtigungen gestoßen, ACLBase hat einen Fehler gemeldetCONTAINER_AND_BLOBSBLOBS_ONLYNONENach der Abfrage habe ich Folgendes festgestellt: Nach PHP5. 2. Abstrakt und statisch dürfen nicht gleichzeitig in Methoden verwendet werden. NONE

#只要将ACLBase中的abstract protected static function createAccessPolicy();abstract protected static function validateResourceType($resourceType);#改为protected static function createAccessPolicy(){}protected static function validateResourceType($resourceType){}#即可

BLOBS_ONLYZusammenfassung

Drei Möglichkeiten, den Prozess zu beenden
Static function MicrosoftAzureStorageCommonInternalACLBase::createAccessPolicy() should not be abstract

Verwenden Sie pid, um den Prozess zu beenden

Verwenden Sie pid, um den Prozess zu beenden

  1. taskkill /pid PID /f

    Verwenden Sie den Prozessnamen, um den Prozess zu beenden

  2. ntsd -c q -p PID

    Adresse

  3. Offiziell bereitgestellte SDK-Adressentsd -c q -pn NAME.exe

Private Hilfsadresse

  1. Hinweis: Bevor Sie das Ende erzwingen, klären Sie bitte die Rolle dieses Prozesses

    Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für das weitere Studium hilfreich ist Bitte achten Sie auf die chinesische PHP-Website!
  2. Verwandte Empfehlungen:

  3. Einführung in das Hochladen von PHP-Hintergrundbildern funktioniert

Einführung in die Verwendung von Ajax zum Übertragen von Werten zwischen JS und PHP

Das obige ist der detaillierte Inhalt vonPHP-Upload-Dateien mit Azure Storage Blob. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn