Maison >développement back-end >tutoriel php >Télécharger des fichiers PHP à l'aide d'Azure Storage Blob

Télécharger des fichiers PHP à l'aide d'Azure Storage Blob

不言
不言original
2018-07-05 14:04:072294parcourir

Cet article présente principalement l'utilisation d'Azure Storage Blob pour télécharger des fichiers avec PHP. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer

Avant-propos

Tâche Lorsqu'il s'agit d'un projet, un petit site internet qui nécessite la gestion de contenu, l'affichage de la page front-end et les effets spéciaux sont réalisés par des collègues front-end. Je suis responsable de la construction du backend de gestion de contenu et de la fourniture des interfaces de données. Ce projet nécessite que la partie gestion puisse télécharger des vidéos, mais la bande passante du serveur fournie par la partie A est très petite et d'autres projets s'exécutent en parallèle sur le même serveur.
Afin d'éviter l'impact ultérieur de mises à niveau soudaines, le chef d'équipe m'a suggéré d'apprendre à utiliser Azure Storage Blob et d'être prêt pour les mises à niveau à tout moment.

Restrictions de version PHP

J'ai trouvé le SDK officiel dans Github.

Exigences minimales

PHP 5.6 ou supérieur

Étant donné que l'environnement PHP configuré localement est 5.5.12 et que le SDK nécessite La version minimale de PHP est 5.6, composer a bloqué la mise à jour
, j'ai donc utilisé composer update --ignore-platform-reqs pour contourner la surveillance de la demande et forcer la mise à niveau.
Cependant, si const est défini sur un tableau dans la classe BlobResources.php, une erreur sera signalée dans la version 5.5

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

Il n'y a pas d'autre choix que de mettre à niveau PHP.

Mettre à niveau WAMP 2.5-3.1

Pour les besoins de développement, nous avons décidé de mettre à niveau Wampserver vers la dernière version.
Il existe une astuce pour mettre à niveau wamp : vous ne pouvez pas écraser directement l'installation. Vous devez d'abord supprimer l'ancienne version, puis installer la nouvelle version.
Lisez attentivement les conseils de mise à niveau.
Pour résumer, ce qu'il faut faire est probablement les deux choses suivantes :

  • Supprimer le service

    Démarrer WampServer
    [Important] Connectez-vous à la sauvegarde MySQL Toutes les données de la base de données
    wampmanager -> Arrêtez tous les services
    wampmanager -> MySQL -> Supprimer le service Supprimer le service MySQL
    wampmanager -> -> Supprimer le service Supprimer le service Apache
    arrêter wampmanager
    Cliquez avec le bouton droit sur wampmanager -> Quitter

  • Renommer le dossier

    Wamp wamp Donnez-lui un autre nom pour la sauvegarde

Installez l'émulateur de stockage

Comme il n'y a pas de compte Azure pour tester dans l'entreprise, heureusement, Azure a un pour tester et développer un émulateur de stockage. Les systèmes Windows peuvent être téléchargés et installés directement, et les systèmes Linux peuvent utiliser l'émulateur de stockage open source Azurite.

  1. Téléchargez l'émulateur, voici le lien de téléchargement.

  2. Une fois l'installation terminée, exécutez StartStorageEmulator.cmd et recherchez une invite dont vous avez besoin pour installer SQL Server Express Local DB. Il y a un lien de téléchargement ici. Sélectionnez Express Edition, puis sélectionnez LocalDB pour télécharger et installer.

  3. Exécutez à nouveau cmd et trouvez une erreur

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)

Après l'interrogation, il a été constaté que c'était parce qu'un processus occupait le port 10000.

#运行:>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/

Démarrer le développement

Vous pouvez essayer d'ajouter des fonctions de conteneur, de blob et de suppression à travers des exemples officiels.
Après avoir téléchargé avec succès le blob, la ressource dans le simulateur de stockage ne peut pas être adressée.
par exemple. Nom du compte utilisé devstoreaccount1, nom du conteneur créé mycontainerudfpbk, nom du blob 5ac1a5c82021d.png.
Selon les règles du document, l'adresse de la ressource doit être
http://127.0.0.1:10000/devstoreaccount1/mycontainerudfpbk/5ac1a5c82021d.png
mais les données renvoyées ont toujours été

<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>

Après avoir lu des articles connexes, j'ai découvert que lorsque création du conteneur, s'il n'y en a pas. Si les autorisations d'accès (politiques d'accès au niveau du conteneur) sont définies, l'accès externe est interdit par défaut.

Les autorisations ACL (PublicAccessType) sont divisées en trois niveaux : CONTAINER_AND_BLOBS, BLOBS_ONLY et NONE. La valeur par défaut est NONE.
Si la ressource doit être accessible en externe, définissez-la sur BLOBS_ONLY.
Attachez votre propre classe auxiliaire Azure encapsulée

J'ai également rencontré un petit problème lors de la définition des autorisations, ACLBase a signalé une erreur
Static function MicrosoftAzureStorageCommonInternalACLBase::createAccessPolicy() should not be abstract
Après l'interrogation, j'ai trouvé qu'après PHP5. 2, abstrait et statique ne peuvent pas être utilisés simultanément dans les méthodes.

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

Résumé

Trois façons de terminer le processus

  1. Utiliser pid pour terminer le processus
    taskkill /pid PID /f

  2. Utilisez pid pour terminer le processus
    ntsd -c q -p PID

  3. Utilisez le nom du processus pour terminer le processus
    ntsd -c q -pn NAME.exe

Adresse

  1. Adresse SDK officiellement fournie

  2. Adresse auxiliaire à usage personnel

Remarque : avant de forcer la fin, veuillez clarifier le rôle de ce processus

Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !

Recommandations associées :

Introduction aux travaux de téléchargement d'images d'arrière-plan PHP

Introduction à l'utilisation d'ajax pour transférer des valeurs entre js et php

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn