Il y a quelques semaines, Nettuts + a publié un didacticiel d'introduction à l'utilisation du système de stockage simple (S3) d'Amazon. Il est bien de pouvoir télécharger un nombre illimité de fichiers pour presque rien, mais ce serait encore mieux si vos utilisateurs pouvaient télécharger des fichiers depuis votre site Web. De cette façon, vous ne devriez pas vous inquiéter de la taille de votre serveur Web pendant une seconde. Essayons!
En gros, nous allons utiliser un élément de fichier HTML standard et une classe PHP S3 facile à utiliser pour créer une page sur laquelle les utilisateurs peuvent télécharger un fichier sur votre compte S3 et obtenir des informations sur les fichiers déjà chargés. Pour cela, vous aurez besoin d’un compte Amazon S3 et d’un serveur Web compatible PHP. Si vous n'avez pas entendu parler d'Amazon S3 ou si vous n'avez pas encore de compte, lisez d'abord le didacticiel d'introduction à S3 de Collis..
Maintenant, la première chose dont nous aurons besoin est un moyen pour PHP de communiquer avec le serveur S3. Donovan Schonknecht a écrit une classe PHP pour cela, alors plutôt que d'essayer de réinventer la roue, nous allons l'utiliser!
Ensuite, créez un nouveau fichier appelé page.php dans le même dossier. La première chose à faire est d’inclure le fichier S3.php. Nous allons utiliser la fonction require_once () en php. Cette fonction n'inclut le fichier que s'il n'a pas été inclus auparavant sur la même page. Ceci afin de nous assurer que nous n'aurons aucun problème avec les redéfinitions de fonctions lorsque le script tentera d'inclure le fichier une seconde fois..
Ensuite, nous devrons saisir les informations d'accès Amazon Web Services (AWS) dont le script a besoin pour accéder à notre serveur S3. Ce sont la clé d'accès et la clé secrète fournies par Amazon (encore une fois, si vous ne savez pas de quoi je parle, consultez le didacticiel d'introduction à NETTUTS). Nous avons maintenant toutes les informations nécessaires pour initier la classe. Ce code a été placé tout en haut de la corps Mots clés.
Créons maintenant un formulaire HTML simple avec un élément de fichier. Cet élément permet aux utilisateurs de parcourir leur lecteur local pour trouver un fichier. Lorsque l'utilisateur appuie sur le bouton d'envoi, le fichier est automatiquement téléchargé sur le serveur en tant que fichier temporaire et les informations sur le fichier sont envoyées dans la variable POST..
Voici l'extrait de code. Assurez-vous de ne pas oublier enctype = "multipart / form-data" ce qui est nécessaire pour que l'élément de fichier fonctionne. Ce code doit être placé en dehors de la balises, puisqu'il s'agit de HTML.
Maintenant, pour ceux qui ne connaissent pas les formes, action = "" indique au script quelle page se rendre après la soumission. Comme nous avons spécifié une chaîne vide à cet endroit, le formulaire affichera les variables, puis actualisera la page actuelle. Ainsi, lorsque la page sera chargée, nous voudrons vérifier si un formulaire a été soumis ou non. Lorsqu'un formulaire est soumis, la page doit exécuter le script qui récupère les variables de publication et prend en charge le déplacement des fichiers sur le serveur S3.
La variable post envoyée par l'élément file est un tableau contenant des informations sur le fichier. Par exemple: nom de fichier, taille, type et nom temporaire. Tout ce dont nous aurons besoin est le nom de fichier et le nom temporaire. Notez que, contrairement aux autres éléments de formulaire, l’élément fichier enverra les variables à $ _FILES et ne pas $ _POST.
Le code PHP ci-dessous vérifie si un formulaire a été soumis et récupère les variables de publication. Nous traiterons avec le serveur S3 plus tard. Ce code devrait être placé juste après l'endroit où nous avons initié la classe s3.
// vérifie si un formulaire a été soumis if (isset ($ _ POST ['Submit'])) // récupère les variables de publication $ fileName = $ _FILES ['theFile'] ['name']; $ fileTempName = $ _FILES ['theFile'] ['tmp_name']; // nous allons continuer notre script d'ici à la prochaine étape!
Ok, nous avons maintenant un formulaire qui envoie un fichier temporaire au serveur et vous laisse des informations. Si vous le souhaitez, vous pouvez télécharger le fichier sur un serveur et le tester. Vous remarquerez qu'il faut effectivement un certain temps pour traiter le formulaire, car il s'agit en fait de télécharger un fichier. Quoi qu'il en soit, le fichier n'apparaîtra nulle part sur votre serveur car il était uniquement stocké sous forme de fichier temporaire. Tout ce qui reste à faire est de déplacer notre fichier téléchargé vers un compartiment. Tout d'abord, nous allons créer un nouveau compartiment, puis nous déplacerons le fichier dans ce compartiment..
Pour créer un compartiment, nous utiliserons la fonction putBucket (seau, acl) dans lequel "compartiment" correspond au nom du compartiment (le mot utilisé par Amazon pour désigner votre dossier principal ou votre répertoire de fichiers). Le deuxième argument est la liste de contrôle d'accès (ACL) dans laquelle vous pouvez définir qui peut et qui ne peut pas lire ou écrire dans ce compartiment. Nous voulons que tout le monde puisse lire nos fichiers, nous allons donc utiliser S3 :: ACL_PUBLIC_READ. Notez qu'un compartiment n'a besoin d'être créé qu'une seule fois. Ainsi, chaque fois que ce script sera exécuté, cette fonction ne fera rien, car le compartiment existe déjà..
Pour déplacer le fichier, nous allons utiliser la fonction putObjectFile (fichier source, compartiment, nouveau nom de fichier, acl).Le fichier source est le chemin du fichier que nous voulons déplacer. Dans notre cas, il s’agit donc du fichier temporaire qui a été chargé via notre formulaire. Bucket est le compartiment vers lequel déplacer le fichier, qui sera le compartiment que nous venons de créer. Newfilename est le nom du fichier que le fichier obtiendra dans le compartiment. Dans ce tutoriel, nous utiliserons le même nom de fichier que sur le lecteur local, mais dans certains cas, vous voudrez peut-être modifier les noms de fichiers. Acl est à nouveau la liste de contrôle d'accès, que nous définirons à nouveau sur S3 :: ACL_PUBLIC_READ.
// crée un nouveau compartiment $ s3-> putBucket ("tutoriel jurgens-nettuts", S3 :: ACL_PUBLIC_READ);
// déplace le fichier if ($ s3-> putObjectFile ($ fileTempName, "tutoriel jurgens-nettuts", $ fileName, S3 :: ACL_PUBLIC_READ)) echo "Nous avons téléchargé votre fichier avec succès."; else echo "Une erreur s'est produite lors de l'envoi de votre fichier ... désolé.";
Maintenant, lorsque vous sélectionnez un fichier et cliquez sur «Télécharger», le fichier sera stocké sur le serveur amazon. Vous pouvez déjà l'afficher en entrant simplement une URL ressemblant à ceci: http: //yourbucketname.s3.amazoneaws.com/votrefichier.ext
Pour la touche finale, nous souhaitons que le script génère une liste de fichiers dans le compartiment. Pour cela nous allons utiliser la fonction getBucket (seau), dans lequel compartiment correspond au compartiment que nous voulons afficher. Cette fonction renvoie un tableau contenant des informations sur les fichiers. Chacun retourné comme un tableau, aussi. Pour visualiser:
Nous voulons sortir tous les fichiers du tableau $ bucket_contents. Pour cela, nous allons utiliser un pour chaque() boucle qui parcourt le tableau jusqu’à ce que tous les éléments aient été traités. Il va stocker l'élément actuel dans la variable $ file et exécuter le code entre les crochets. Il ne nous reste plus qu'à faire écho à un lien vers le fichier.
Placez ce code sous le formulaire pour y afficher la liste.
getBucket ("jurgens-nettuts-tutorial"); foreach ($ bucket_contents en tant que $ fichier) $ fname = $ file ['name']; $ furl = "http://jurgens-nettuts-tutorial.s3.amazonaws.com/".$fname; // affiche un lien vers le fichier echo "$ fname
";?>
Avec un peu de style CSS, votre résultat final pourrait ressembler à ceci:
Donc, voilà, votre propre script de téléchargement de fichier illimité. Bien sûr, vous pouvez faire beaucoup plus avec la classe PHP S3. Jetez simplement un coup d’œil sur son fichier readme et vous serez prêt à partir. C'est vraiment facile à utiliser!
Télécharger les fichiers source
Voir une démo