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
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.
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.
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
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.
Téléchargez l'émulateur, voici le lien de téléchargement.
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.
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 erreurStatic 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é
Utiliser pid pour terminer le processustaskkill /pid PID /f
Utilisez pid pour terminer le processusntsd -c q -p PID
Utilisez le nom du processus pour terminer le processusntsd -c q -pn NAME.exe
Adresse SDK officiellement fournie
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!